Scripting.Dictionary
01.09.2022 13:31:05
Thorsten
ich arbeite mich langsam aber sich in die VBA-Welt ein und stoße nun das erste mal auf ein Problem, mit welchem ich in Videos, etc nicht weiter komme.
Ich habe eine Userform mit 2 Comboboxen.
Die Comboboxen stehen in Abhängigkeit zueinander und sollen jeweils nur die werte einmal wiedergeben.
Mit der ersten Combobox klappt das auch, nur wenn ich die zweite einfüge, "Bullshit".
Sorry für meine Wortwahl.:-)
Private Sub UserForm_Initialize()
cbmaterialtyp.List = Range("tbllieferant[Material type]").Value
cbmcbmaincommodity.List = Range("tbllieferant[Main Commodity]").Value
'Duplikate entfernen
'Variabeln dimensionieren
Dim oDic As Object
Set oDic = CreateObject("Scripting.Dictionary")
Dim cell As Range
Dim oDicN As Object
Set oDicN = CreateObject("Scripting.Dictionary")
Dim cellN As Range
'Schleife über kompletten Zellbereich
For Each cell In shoverview.Range("tbllieferant[Material type]")
For Each cellN In shoverview.Range("tbllieferant[Main Commodity]")
'Zellwert in das Dictionary einlesen falls noch nicht vorhanden
oDic(cell.Value) = 0
oDicN(cellN.Value) = 0
Next cell
NExt cellN
'Combobox mit Dictionary-Keys befüllen
cbmaterialtyp.List = oDic.keys
cbmaincommodity.List = oDicN.keys
End Sub
Private Sub cbmaterialtyp_Change()
'Abhängige Dropdown
'cbmaterialtyp zurücksetzen, bzw. Auswahl leeren
cbmaincommodity.Clear
'Die cdmaincommodity freischalten
cbmaincommodity.Enabled = True
'Die cbmaincommodity befüllen
Dim Zeile As Long
Dim tbl As ListObject
Set tbl = shoverview.ListObjects("tbllieferant")
'Schleife über alle Zeilen der Tabelle
For Zeile = 1 To tbl.DataBodyRange.Rows.Count
'Prüfen ob die Auswahl in der Cbmaterialtyp mit dem Wert in der Zeile übereinstimmt
If cbmaterialtyp.Value = tbl.DataBodyRange(Zeile, 1).Value Then
'Wert der cbmaincommodity zuweisen
cbmaincommodity.AddItem tbl.DataBodyRange(Zeile, 2).Value
End If
Next Zeile
End Sub