• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Verborgen tabblad zichtbaar maken op basis van celinhoud

Status
Niet open voor verdere reacties.

tomswaelen

Gebruiker
Lid geworden
8 dec 2004
Berichten
349
Ik ben in Excel een soort van wizard aan het maken. De Excel bestaat uit 4 tabbladen, waarvan aanvankelijk enkel het eerste getoond wordt, de andere 3 zijn verborgen. Nu zou ik het zo willen maken, dat tabblad 2 pas getoond wordt als tabblad 1 volledig juist ingevuld is. Hoe doe ik dit via VBA?

Het zal iets zijn met onder andere:

Code:
If Range("B20").Value = "OK" Then

Sheets("Stap 2").Visible = True

Maar ik ken niet zoveel van VBA, ik weet niet goed hoe ik dit moet implementeren. Het is geen macro die aangeroepen wordt vanuit een knop, het is op basis van celinhoud.

De gebruiker zou trouwens ook moeten blijven staan in de cel waarin hij stond. Het is niet zo dat hij automatisch ook naar tabblad 2 moet springen.

Ik maak de laatste dagen nogal gretig gebruik van dit forum. Bedankt alvast hiervoor! :-)
 
Dit moet het doen.
Je zet de code in je werkblad waar je OK in zal vullen.

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Me.Range("B20").Address Then
    If Target.Value = "OK" Then
        Sheets("Stap 2").Visible = True
    Else
        Sheets("Stap 2").Visible = False
    End If
End If
End Sub

Gr.

SjonR
 
Laatst bewerkt:
Ik ben wel vergeten te vermelden dat cel B20 het resultaat is van een formule, die 'OK' geeft als andere velden zijn ingevuld of een bepaalde waarde hebben. Dus de code werkt enkel als ik manueel in B20 de waarde "OK" typ.

Valt hier een mouw aan te passen?
 
Dan moet je de Calculate_event gebruiken.
 
Ik heb geprobeerd het nu zelf uit te vissen, maar dit werkt alvast niet:

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = Me.Range("B18").Address Then
    If Target.Calculate = "U kan vanaf nu naar tabblad 'Stap 2 - Gegevens aanvrager' gaan" Then
        Sheets("Stap 2 - Gegevens aanvrager").Visible = True
    Else
        Sheets("Stap 2 - Gegevens aanvrager").Visible = False
    End If
End If
End Sub
 
Dat is geen event.
Onderstaande is een event...
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
...en die is er ook voor de calculate methode.
Rechtsboven in de Vb-editor in het menu van de dropdown.
 
Sorry voor mijn noob-vragen hoor :o

Dit geeft een compileerfout:

Code:
Private Sub Worksheet_Calculate(ByVal Target As Range)
If Target.Address = Me.Range("B18").Address Then
    If Target.Calculate = "U kan vanaf nu naar tabblad 'Stap 2 - Gegevens aanvrager' gaan" Then
        Sheets("Stap 2 - Gegevens aanvrager").Visible = True
    Else
        Sheets("Stap 2 - Gegevens aanvrager").Visible = False
    End If
End If
End Sub
 
Ik denk dat hij moet kijken naar de inhoud van de cel, je gaat er niet opstaan. (Selecteren)
 
Dit is de calculate-event.
Code:
Private Sub Worksheet_Calculate()

Ps. ik laat je een beetje aanmodderen om je zo wat wegwijs te maken.
Altijd beter dan voorkauwen.
 
Laatst bewerkt:
Wat de calculate-event is, begreep ik ondertussen :-)

Deze werkt ook niet:

Code:
Private Sub Worksheet_Calculate(ByVal Target As Range)
If Target.Address = Me.Range("B18").Address Then
    If Range.Calculate = "U kan vanaf nu naar tabblad 'Stap 2 - Gegevens aanvrager' gaan" Then
        Sheets("Stap 2 - Gegevens aanvrager").Visible = True
    Else
        Sheets("Stap 2 - Gegevens aanvrager").Visible = False
    End If
End If
End Sub

Kan het zijn dat onderstaande er niet bij moet, omdat de cel niet geselecteerd wordt? Maar ook dan geeft het een compileerfout:

Code:
If Target.Address = Me.Range("B18").Address Then
 
Laatst bewerkt:
Het spijt me, je doet niet wat ik schrijf wat betreft het dropdown menuutje.
Als je die had gebruikt had je gezien dat de calculate-event geschreven wordt zoals in mijn vorig schrijven.

Code:
Private Sub Worksheet_Calculate()
If lcase(range("b20").value) = "ok" then
        Sheets("Stap 2 - Gegevens aanvrager").Visible = True
    Else
        Sheets("Stap 2 - Gegevens aanvrager").Visible = False
    End If
End Sub

Zo zal het ook wel werken vermoed ik.
Code:
Private Sub Worksheet_Calculate()
  Sheets("Stap 2 - Gegevens aanvrager").Visible =iIf(lcase(range("b20").value) = "ok",-1,0)
End Sub
 
Ik weet niet of dit correct is maar probeer het eens.
Code:
Private Sub Worksheet_Calculate()
  If Range("B18").Value = "OK" Then
    MsgBox "U kan vanaf nu naar tabblad 'Stap 2 - Gegevens aanvrager' gaan"
    Sheets("Stap 2 - Gegevens aanvrager").Visible = True
  Else
    Sheets("Stap 2 - Gegevens aanvrager").Visible = False
  End If
End Sub
 
@HSV: ik had wel degelijk de dropdown gebruikt hoor. Maar ik dachr dat die code dan nog moest aangepast worden... Zal zo dadelijk eens proberen.
 
@HSV:
Die Iif is ook niet nodig.
Code:
Sheets("Stap 2 - Gegevens aanvrager").Visible = Lcase(Range("B20").Value) = "ok"
 
Ik weet niet of dit correct is maar probeer het eens.
Code:
Private Sub Worksheet_Calculate()
  If Range("B18").Value = "OK" Then
    MsgBox "U kan vanaf nu naar tabblad 'Stap 2 - Gegevens aanvrager' gaan"
    Sheets("Stap 2 - Gegevens aanvrager").Visible = True
  Else
    Sheets("Stap 2 - Gegevens aanvrager").Visible = False
  End If
End Sub

Dit werkt in elk geval. Niet zeker of ik die msgbox nodig heb, maar die haal ik er wel uit indien nodig. Zo'n msgbox doet het wel opvallen natuurlijk :-)
 
Het spijt me, je doet niet wat ik schrijf wat betreft het dropdown menuutje.
Als je die had gebruikt had je gezien dat de calculate-event geschreven wordt zoals in mijn vorig schrijven.

Code:
Private Sub Worksheet_Calculate()
If lcase(range("b20").value) = "ok" then
        Sheets("Stap 2 - Gegevens aanvrager").Visible = True
    Else
        Sheets("Stap 2 - Gegevens aanvrager").Visible = False
    End If
End Sub

Zo zal het ook wel werken vermoed ik.
Code:
Private Sub Worksheet_Calculate()
  Sheets("Stap 2 - Gegevens aanvrager").Visible =iIf(lcase(range("b20").value) = "ok",-1,0)
End Sub

Dit werkte niet, vrees ik.
 
By the way, ik weet dat je niet overvloedig mag quoten op dit forum, maar als ik het tegen twee verschillende forumvrienden heb, vind ik dat wel aangewezen :-)
 
Die van HSV is prima, maar het moet kennelijk B18 zijn in plaats van B20?
Met een voorbeeld documentje was dat al lang duidelijk geweest.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan