• 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.

VBA Verbergen/ zichtbaar maken rijen obv keuzelijst

Status
Niet open voor verdere reacties.

TWDR

Gebruiker
Lid geworden
26 jun 2017
Berichten
53
Beste mensen,

Ik loop tegen een probleem aan waar ik maar niet uitkom. Ik begin wat gewend te raken met Excel maar ben nog een absolute VBA beginner. Nu wil ik dmv een keuze vakje met 3 mogelijkheden specifieke rijen zichtbaar maken of verbergen. Hoe doe ik dit? Kan iemand mij een zetje in de goede richting geven. Gebruik ik een formulierbesturingselement of juist een ActiveX besturingselement? En hoe zet ik de VBA code op?

Er zijn 3 mogelijkheden:
  • ZOEK OP A
  • ZOEK OP B
  • ZOEK OP C

In beginsel moeten rijen 10:100 verborgen zijn.

Als Zoeken op A word geselecteerd moet RIJ 11:36 zichtbaar worden
Als Zoeken op B word geselecteerd moet RIJ 38:65 zichtbaar worden
Als Zoeken op C word geselecteerd moet RIJ 68:98 zichtbaar worden
 

Bijlagen

  • VBA TEST.xlsx
    16,4 KB · Weergaven: 103
Daar kan je bijvoorbeeld dit voor gebruiken:
Code:
Sub ShowHide()
    Application.ScreenUpdating = False
    Rows("11:36").Hidden = Not UCase(Range("A10")) = "A"
    Rows("38:65").Hidden = Not UCase(Range("A10")) = "B"
    Rows("68:98").Hidden = Not UCase(Range("A10")) = "C"
    Application.ScreenUpdating = True
End Sub
 
Laatst bewerkt:
Op basis van code Edmoor, maar dan in de combobox.
 

Bijlagen

  • VBA TEST.xlsm
    24,5 KB · Weergaven: 151
Met een beetje logica (of het logisch indelen van het bestand) kan je ook een heel eind komen.

Code:
Private Sub ComboBox1_Change()
  With ComboBox1
    Rows("11:99").Hidden = .ListIndex <> -1
    If .ListIndex <> -1 Then Rows(8).Offset(30 * .ListIndex).Resize(25 + (.ListIndex + 1) * 2 + (.ListIndex = 0) * -2).Hidden = False
  End With
End Sub

De combobox kan je natuurlijk op meerdere manieren vullen.
Code:
Private Sub ComboBox1_GotFocus()
  ComboBox1.List = Split("A B C")
End Sub
 
@edmoor en @SjonR Thanks! :thumb: Dat is wat ik zocht.

Alleen waar/ hoe kan ik de selectie aanpassen in de keuzelijst met invoervak??

In het voorbeeld van SjonR staat nu A,B en C. Het lukt mij niet om deze waarden aan te passen.
 
Met een beetje logica (of het logisch indelen van het bestand) kan je ook een heel eind komen.

Code:
Private Sub ComboBox1_Change()
  With ComboBox1
    Rows("11:99").Hidden = .ListIndex <> -1
    If .ListIndex <> -1 Then Rows(8).Offset(30 * .ListIndex).Resize(25 + (.ListIndex + 1) * 2 + (.ListIndex = 0) * -2).Hidden = False
  End With
End Sub

De combobox kan je natuurlijk op meerdere manieren vullen.
Code:
Private Sub ComboBox1_GotFocus()
  ComboBox1.List = Split("A B C")
End Sub

Ik snap niet wat deze code doet/ hoe ik dit moet lezen. Is deze code beter/ handiger?
 
De code van VenA verklaren lukt me niet ( te wijten aan mijn kennis, niet aan die van VenA :)), maar het aanpassen van je keuzelijst is simpel.

In mijn bestand zie je bij de VBA-editor in ThisWorkbook staan:
Code:
Private Sub Workbook_Open()
Blad1.ComboBox1.List = Array("A", "B", "C")
End Sub

Hier kan je de A, B en C dus aanpassen naar wat je zelf wilt hebben en ook dingen toevoegen. Dit werkt bijna gelijk aan wat VenA schreef (SPLIT(("A B C").

voordeel van de Split is dat je minder """""""" en ,,,, hoeft te gebruiken :)
 
Laatst bewerkt:
De code van VenA verklaren lukt me niet ( te wijten aan mijn kennis, niet aan die van VenA :)), maar het aanpassen van je keuzelijst is simpel.

In mijn bestand zie je bij de VBA-editor in ThisWorkbook staan:
Code:
Private Sub Workbook_Open()
Blad1.ComboBox1.List = Array("A", "B", "C")
End Sub

Hier kan je de A, B en C dus aanpassen naar wat je zelf wilt hebben en ook dingen toevoegen. Dit werkt bijna gelijk aan wat VenA schreef (SPLIT(("A B C").

voordeel van de Split is dat je minder """""""" en ,,,, hoeft te gebruiken :)

:thumb: Thanks :d
 
Van mij hoeft al dat quoten niet.

Zo heel moeilijk is mijn code niet als je een beetje kan rekenen.;)

Om een klein beetje uitleg te geven; Elk item in een combobox heeft een indexnummer.(.ListIndex) Als de combobox leeg is dan is dit nummer -1, het eerste item heeft het nummer 0, het tweede item heeft het nummer 1, etc. Met dit nummer kan je gaan rekenen.

Code:
Rows(8).Offset(30 * .ListIndex)
zal bij de keuze van A een verschuiving geven 30*0 en bij de keuze van B een verschuiving geven van 30 * 1 etc.
Code:
(.ListIndex = 0) * -2)
Geeft De waarde FAlSE of TRUE * -2. In VBA is FALSE = 0 en TRUE is -1 vandaar de * -2

Hetzelfde kan je dan ook weer toepassen in
Code:
Resize(25 + (.ListIndex + 1) * 2

Hoe meer structuur in het bestand hoe eenvoudiger de code kan worden.

Nb. De code is onafhankelijk van wat je in de combobox zet.
 

Bijlagen

  • Copy of VBA TEST.xlsb
    20,5 KB · Weergaven: 100
Thanks voor de uitleg! Snap nu idd wat de code doet. Echter voor mijn gevoel lijkt de volgende code:

Code:
Private Sub ComboBox1_Change()
    Application.ScreenUpdating = False
    Rows("11:36").Hidden = Not ComboBox1.Value = "A"
    Rows("38:65").Hidden = Not ComboBox1.Value = "B"
    Rows("68:98").Hidden = Not ComboBox1.Value = "C"
    Application.ScreenUpdating = True
End Sub

Een stuk makkelijker. Maar dat ligt waarschijnlijk gewoon aan mij ;). Wat zijn de voordelen van jouw code ten opzichte van deze?

NB. Ik ben nieuw met VBA dus nog niet zo handig hiermee..
 
Het voordeel ervan is dat je niet afhankelijk bent van de waarden A, B en C en ook niet van het aantal van 3, zolang de logica van de te verbergen delen gelijk blijft.
Het is wellicht nog een stapje te ver voor je als beginner in VBA.

Mijn reactie in #2 doet alleen precies wat je vroeg, zonder de flexibiliteit die het voorbeeld van VenA biedt.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan