Afhankelijke keuzelijsten.

Status
Niet open voor verdere reacties.

snb

Verenigingslid
Lid geworden
12 jun 2008
Berichten
19.725
'Soms' komt er in fora een vraag over afhankelijke keuzen.
Om te kunnen verwijzen naar een pagina waarop daarover het een en ander te vinden is heb ik een pagina gemaakt met 9 verschillende VBA-methoden:

- ADODB
- Dictionary
- Collection
- Array
- Autofilter
- Advancedfilter
- Evaluate
- Pivottable
- Treeview

Voor alle methoden, voor zover van toepassing, is een filtermethode vooraf, achteraf en met een klassemodule uitgewerkt.

In een voorbeeldbestand staat de uitwerking met per methode een apart Userform.

De keuzen zijn gebaseerd op een tabel met 3375 unieke elementen en 211 daaarop gebaseerde keuzelijsten.

Wellicht heb je zin je tanden erin te zetten.

Je kunt de pagina hier vinden: https://www.snb-vba.eu/VBA_Afhankelijke_Listboxen.html


suggesties zijn welkiom !
 
Laatst bewerkt:
Staat dat voorbeeldbestand op de site?
 
@cow 18

Ja de sortedlist en de arraylist kunnen er ook nog bij.
Meteen een mooie vergelijking tussen die 'magazijn'methodes in VBA.
 
Toch jammer dat ik dan weer het domme jongetje in de klas moet zijn waar het niet werkt :)
Bij mij vliegen de keuzerondje alle kanten op...
 

Bijlagen

  • optierondjes.png
    optierondjes.png
    15,4 KB · Weergaven: 68
@Octa

Met welke Excelversie werk je (toch geen ADHD-versie ?)
Ik maak dit soort dingen in Excel 2010.

Misschien werkt dit in de macromodule van sheet1:

Code:
Private Sub O_01_Change()
    Sheet1.Shapes.Range(Array("C_01", "C_02", "C_03", "C_04", "C_06", "C_07", "C_08")).Visible = msoTrue
    Sheet1.Shapes.Range(Array("C_05", "C_09")).Visible = msoFalse
    M_00
End Sub
Private Sub O_02_Click()
    Sheet1.Shapes.Range(Array("C_02", "C_03", "C_04", "C_05", "C_09")).Visible = msoTrue
    Sheet1.Shapes.Range(Array("C_01", "C_06", "C_07", "C_08")).Visible = msoFalse
    M_00
End Sub
Private Sub O_03_Change()
    Sheet1.Shapes.Range(Array("C_01", "C_02", "C_03", "C_04", "C_05", "C_06", "C_07", "C_08")).Visible = msoTrue
    Sheet1.Shapes.Range(Array("C_09")).Visible = msoFalse
    M_00
End Sub
Private Sub O_04_Change()
    Sheet1.Shapes.Range(Array("C_01", "C_02", "C_03", "C_04", "C_05", "C_06", "C_07", "C_08", "C_09")).Visible = 0
    Sheet1.Shapes.Range(Array("C_09")).Visible = -1
    M_00
End Sub
Sub M_00()
    For j = 1 To 4
       With Sheet1.OLEObjects("O_0" & j)
            .Placement = 3
            .Top = 30 + 36 * (j - 1)
            .Left = 30
            .Width = 78
            .Height = 30
        End With
   Next
End Sub
 
Laatst bewerkt:
Ik werk nu met Office365. Ik zal de nieuwe variant uiteraard zo proberen. (En ik word wel eens van een niet-geïdentificeerd ADHD slachtoffer genoemd ;). Maar dat bestond in mijn jeugd nog niet :).)
 
Dan schijnt ADHD van mens op systeem over te kunnen gaan. Verbaast me eigenlijk niet. Ben benieuwd naar de te verwachten mutanten.
 
Vandaag de pagina uitgebreid met SortedList en ArrayList.
Ook het voorbeeldbestand staat daar nu vol mee.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan