Beste VBA specialisten,
Voor een adressenbestand heb ik met het nodige plakwerk aan codes een redelijk werkend geheel gekregen.
Wat mij niet lukt is opvolgende comboboxen gesorteerd te krijgen.
Het bestand waar ik in werk heeft met name in kolom 32 vaak ontbrekende gegevens.
In kolom 24 staan namen maar deze zijn in de originele sheet niet gesorteerd.
De sheet met gegevens wordt alleen op klantnaam gesorteerd.
Dit was mijn eerste poging:
De code die ik hierboven gebruikte vulde netjes de comboboxen 24 en 32 alleen dan kwamen er ook dubbele of lege gegevens in te staan (met name uit kolom 32, afdeling)
Ik heb momenteel de volgende code:
Met de bovenstaande code lukt het me om de unieke waarde eruit te krijgen maar deze komen in volgorde van de originele sheet te staan.
Daarnaast komt bij keus32 de lege cel als een 0 erbij te staan. I.p.v. 0 zou een 'lege' keuze mooier zijn.
Dus hoe kan ik de combobox 24 en 32 nog laten sorteren oplopend (dus NIET de sheet!)??
Bekijk bijlage Contacten.xlsm
Ik ben zelf niet bedreven in VBA maar probeer met veel uitproberen met voorbeelden van bv deze site toch het een en ander bij ons te automatiseren.
Dus van veel van de code weet ik niet precies wat het doet of waarom het het doet maar bij ons telt eventjes het resultaat.
Nog een vraagje over de lijst - split functie.
Van wat ik begrijp worden alle gevonden waarde eerst in een lijst gezet (alles achter elkaar) met hierin een "," tussen elke gevonden waarde.
Is er een mogelijkheid dat hij hiervoor bv "|" gebruikt en dat hij hem dan ook splitst bij de "|".
Bij de keus1_Change is dat de "," denk ik maar moet ik dan in de lijst functie ook elke "," vervangen door een "|"?
Dit omdat ik eerst gebruik maakte van achternaam, tussenvoegsel en initialen maar dan splitste hij die ook (kolom 26)
Ik gebruik nu kolom 24 om dit even te voorkomen (en op voornaam leest misschien wat makkelijker voor de gebruikers).
Voor een adressenbestand heb ik met het nodige plakwerk aan codes een redelijk werkend geheel gekregen.
Wat mij niet lukt is opvolgende comboboxen gesorteerd te krijgen.
Het bestand waar ik in werk heeft met name in kolom 32 vaak ontbrekende gegevens.
In kolom 24 staan namen maar deze zijn in de originele sheet niet gesorteerd.
De sheet met gegevens wordt alleen op klantnaam gesorteerd.
Dit was mijn eerste poging:
Code:
Private Sub keus1_Change()
Dim RRow As Integer
RRow = 2
keus24.Clear
keus32.Clear
With Blad2
Do Until .Cells(RRow, 1) = ""
If .Cells(RRow, 1) = keus1.Value Then
keus24.AddItem .Cells(RRow, 24)
keus32.AddItem .Cells(RRow, 32)
End If
RRow = RRow + 1
Loop
End With
End Sub
Ik heb momenteel de volgende code:
Code:
Private Sub keus1_Change()
keus24.ListIndex = -1
keus32.ListIndex = -1
[Blad1!A1] = keus1.Value
If keus1.ListIndex > -1 Then keus24.List = Split(lijst(Filter([transpose(if(gegevens!A3:A999=Blad1!A1,gegevens!X3:X999,"#"))], "#", False)), ",")
If keus1.ListIndex > -1 Then keus32.List = Split(lijst(Filter([transpose(if(gegevens!A3:A999=Blad1!A1,gegevens!AF3:AF999,"#"))], "#", False)), ",")
End Sub
Function lijst(sn)
For j = 0 To UBound(sn)
If InStr(c01 & ",", "," & sn(j) & ",") = 0 Then c01 = c01 & "," & sn(j)
Next
lijst = Mid(c01, 2)
End Function
Met de bovenstaande code lukt het me om de unieke waarde eruit te krijgen maar deze komen in volgorde van de originele sheet te staan.
Daarnaast komt bij keus32 de lege cel als een 0 erbij te staan. I.p.v. 0 zou een 'lege' keuze mooier zijn.
Dus hoe kan ik de combobox 24 en 32 nog laten sorteren oplopend (dus NIET de sheet!)??
Bekijk bijlage Contacten.xlsm
Ik ben zelf niet bedreven in VBA maar probeer met veel uitproberen met voorbeelden van bv deze site toch het een en ander bij ons te automatiseren.
Dus van veel van de code weet ik niet precies wat het doet of waarom het het doet maar bij ons telt eventjes het resultaat.
Nog een vraagje over de lijst - split functie.
Van wat ik begrijp worden alle gevonden waarde eerst in een lijst gezet (alles achter elkaar) met hierin een "," tussen elke gevonden waarde.
Is er een mogelijkheid dat hij hiervoor bv "|" gebruikt en dat hij hem dan ook splitst bij de "|".
Bij de keus1_Change is dat de "," denk ik maar moet ik dan in de lijst functie ook elke "," vervangen door een "|"?
Dit omdat ik eerst gebruik maakte van achternaam, tussenvoegsel en initialen maar dan splitste hij die ook (kolom 26)
Ik gebruik nu kolom 24 om dit even te voorkomen (en op voornaam leest misschien wat makkelijker voor de gebruikers).