van elkaar afhankelijke comboboxen in een userform

Status
Niet open voor verdere reacties.

Polman

Gebruiker
Lid geworden
20 jun 2012
Berichten
9
Ik wil een userform maken waarin ik in combobox (CB1) landen heb staan. Door een land hier te kiezen, wil ik in combobox2 (CB2) een regio uit het landresultaat van CB1 kunnen kiezen.
Bijvoorbeeld: als ik in CB1 voor Frankrijk kies, dan wil ik dat in CB2 alleen de regio's uit Frankrijk (bv Loirestreek, Bourgondië, etc) geshowed worden als keuzelijst.
Kies ik voor bv Duitsland, dan zou in CB2 alleen de Duitse regio's geshowed moeten worden.
Dus: als CB1.Value = Frankrijk dan zou ik graag zien dat de RowSource.Value van CB2 kijkt naar de lijst met Franse regio's en dus laat kiezen uit deze gebieden.
als CB1.Value = Duitsland, dan zou CB2 de RowSource.Value naar de lijst met Duitse regio's moeten kijken.
Alleen....dit is niet zo simpel. Weet iemand een eenvoudige(!!) oplossing voor deze van elkaar afhankelijke comboboxen???

Alvast dank voor het meedenken.
 
Dat is simpel genoeg als je een document met vulling, dus de landen en de regio's, incl. een userform met de comboboxen plaatst.
 
klein opzetje gemaakt, zelf te vervolledigen.


mvg

Leo
 

Bijlagen

  • _Afhankelijke combobox.xlsm
    28 KB · Weergaven: 153
Hoi Leo,

Dat bedoelde ik ook inderdaad, alleen heb je dat worksheet object niet nodig:
Code:
Private Sub ComboBox1_Change()
    Dim lr As Long, col As Long
    
    With Sheets("blad1")
        col = WorksheetFunction.Match(ComboBox1, .Range("a1", "z1"), 0)
        lr = .Cells(.Rows.Count, col).End(xlUp).Row
        ComboBox2.Clear
        For x = 2 To lr
            ComboBox2.AddItem (Sheets("blad1").Cells(x, col))
        Next
    End With
End Sub
 
@Leotaxi

Vermijd .additem om een listbox/combobox te vullen.
Zie ook: http://www.snb-vba.eu/VBA_Fill_combobox_listbox.html


Deze code is voldoende in jouw voorbeeld:

Code:
Private Sub UserForm_Initialize()
  ComboBox1.List = Application.Transpose([blad1!A1].CurrentRegion.Rows(1).Value)
End Sub

Private Sub ComboBox1_Change()
   If ComboBox1.ListIndex > -1 Then ComboBox2.List = [blad1!A1].CurrentRegion.Offset(1).Columns(ComboBox1.ListIndex + 1).SpecialCells(2).Value
End Sub
 
Laatst bewerkt:
Edmoor, SNB,

bedankt voor de tips
1 ste van Edmoor, hoe korter de code hoe beter.
2 de van SNB, veel snellere manier van boxen vullen, dat staat vast.

mvg

Leo
 
Nog een methode om de interaktie met het werkblad tot het uiterste te reduceren:
 

Bijlagen

  • __Afhankelijke combobox snb.xlsb
    18,5 KB · Weergaven: 82
Vind ik een knappe :thumb:
Alleen staan dan de landnamen ook in de 2e combobox.
 
Is ook simpel op te lossen met:

Code:
Private Sub ComboBox1_Change()
  ComboBox2.List = Filter(Application.Index(ComboBox1.List, ComboBox1.ListIndex + 1), ComboBox1.Value, False)
End Sub
 

Bijlagen

  • __Afhankelijke combobox snb.xlsb
    17,3 KB · Weergaven: 53
Perfect :thumb:
 
@edmoor

Ter illustratie van 'structuring precedes coding' de laatste versie. Naarmate de gegevens beter zijn opgebouwd voor het doel waarvoor ze bedoeld zijn, is er minder code nodig om die gegevens te gebruiken.
 

Bijlagen

  • __Afhankelijke combobox snb.xlsb
    19,8 KB · Weergaven: 124
Laatst bewerkt:
Dat is zeker waar. Bij Excel wordt daar niet vaak bij stil gestaan terwijl er voor echte databases complete trainingen voor ontwerp en normalisatie bestaan.
 
@Edmoor, @SNB en @Leotaxi,

Hartelijk dank voor jullie antwoorden. Hier kan ik zeker wat mee.
Ik zal natuurlijk de lijstjes aanpassen naar eigen inzicht, maar ik ben hier erg mee geholpen.
Ik ga het ook stap voor stap uitpluizen om te kijken waar ik zelf de mist ben in gegaan.
Als ik dit zo zie, moet het ook mogelijk zijn om er een eventuele derde combobox achter te hangen die bv een aantal plaatsen uit de gekozen regio weergeeft.

mvg, Polman
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan