Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1900to1904
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Abhängige Dropdowns

Abhängige Dropdowns
25.09.2022 23:43:18
Marcel
Hallo zusammen,
leider kann ich auf meinen alten Beitrag (https://www.herber.de/forum/archiv/1896to1900/1898112_vba_Eingabe_Fenster_programmieren.html#1898215) nicht mehr antworten.
Daher hier:
Userform:
Userbild
Ich möchte, dass als Ergebnis der Userform ein 4-stelliges Kürzel aus Spalte "I" (Tabellenblatt Datenquelle) in der Zelle B6 (Tabellenblatt Übersicht) ausgegeben wird.
Ich habe diese Test Datei erstellt.
https://www.herber.de/bbs/user/155371.xlsm
Die o.g. Userform soll mit abhängigen Dropdown-Feldern auf die Datenquelle zugreifen und einmalige Werte in den Dropdownfeldern anzeigen. Spaltennamen der Datenquelle sind analog zu den Kombinationsfeldern der Userform.
Die Userform habe ich bereits erstellt, komme allerdings bei den Codes der Kombinationsfelder und vom OK Button nicht mehr weiter - ich bin wenn überhaupt absoluter vba Anfänger.
Momentan wirft er mir im Kombifeld Produktgruppe immer doppelte Werte aus und im letzten Kombifeld genauso. Ich habe mich total festgefahren.
Kann mir hier jemand helfen und sagen wie die Userform dann auch aus der gewählten Produktuntergruppe das dazugehörige Kürzel aus der Datenquelle in Zelle B6 auswirft?


'Dropdown Feld "Produktgruppe" aktivieren und befüllen
Private Sub cbProduktklasse_Change()
'cbProduktgruppe zurücksetzen
cbProduktgruppe.Clear
'cbProduktgruppe freischalten
cbProduktgruppe.Enabled = True
'cbProduktgruppe befüllen
Dim Zeile As Long
Dim tbl As ListObject
Set tbl = ShDatenquelle.ListObjects("tblDatenquelle")
'Schleife über alle Zeilen der Tabelle; "tbl.datab......count" steht für letzte Zeile
For Zeile = 1 To tbl.DataBodyRange.Rows.Count
'Prüfen, ob die Auswahl in cbProduktklasse mit dem Wert in der Zeile übereinstimmt
If cbProduktklasse.Value = tbl.DataBodyRange(Zeile, 4).Value Then
'Wert der cbProduktgruppe zuweisen
cbProduktgruppe.AddItem tbl.DataBodyRange(Zeile, 6).Value
End If
Next Zeile
End Sub
'Dropdown Feld "Produktuntergruppe" aktivieren und befüllen
Private Sub cbProduktgruppe_Change()
'cbProduktgruppe zurücksetzen
cbProduktuntergruppe.Clear
'cbProduktgruppe freischalten
cbProduktuntergruppe.Enabled = True
'cbProduktgruppe befüllen
Dim Zeile As Long
Dim tbl As ListObject
Set tbl = ShDatenquelle.ListObjects("tblDatenquelle")
'Schleife über alle Zeilen der Tabelle; "tbl.datab......count" steht für letzte Zeile
For Zeile = 1 To tbl.DataBodyRange.Rows.Count
'Prüfen, ob die Auswahl in cbProduktklasse mit dem Wert in der Zeile übereinstimmt
If cbProduktgruppe.Value = tbl.DataBodyRange(Zeile, 6).Value Then
'Wert der cbProduktgruppe zuweisen
cbProduktuntergruppe.AddItem tbl.DataBodyRange(Zeile, 8).Value
End If
Next Zeile
End Sub
'läuft immer dann ab, wenn Userform zum ersten Mal initialisiert wird
Private Sub UserForm_Initialize()
'Variablen dimensionieren
Dim oDic As Object
Set oDic = CreateObject("scripting.dictionary")
Dim Cell As Range
'Schleife über kompletten Zellbereich
For Each Cell In ShDatenquelle.Range("tblDatenquelle[Produktklasse]")
'Zellwert in Dictionary einlesen, falls noch nicht vorhanden
oDic(Cell.Value) = 0
Next Cell
'Combobox mit Dictionary-Keys befüllen
cbProduktklasse.List = oDic.keys
End Sub
Viele Grüße
Marcel

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abhängige Dropdowns
26.09.2022 01:10:50
ralf_b

Private Sub cbProduktklasse_Change()
Dim unionRange As Range
Dim arr
cbProduktgruppe.Clear
cbProduktgruppe.Enabled = True
Set unionRange = Range("tblDatenquelle[[Produktklasse]:[Produktgruppe]]")
arr = getlist(unionRange, cbProduktklasse.Value, 2)
If UBound(arr) > 0 Then cbProduktgruppe.List = arr
End Sub
Private Sub cbProduktgruppe_Change()
Dim unionRange As Range
Dim arr
cbProduktuntergruppe.Clear
cbProduktuntergruppe.Enabled = True
Set unionRange = Range("tblDatenquelle[[Produktgruppe]:[Produktuntergr.]]")
arr = getlist(unionRange, cbProduktgruppe.Value, 2)
If UBound(arr) > 0 Then cbProduktuntergruppe.List = arr
End Sub
'läuft immer dann ab, wenn Userform zum ersten Mal initialisiert wird
Private Sub UserForm_Initialize()
cbProduktklasse.List = getlist(Range("tblDatenquelle[Produktklasse]"))
End Sub
Function getlist(rng As Range, Optional strVal As String = "", Optional ofset As Long = 0)
Dim rngCell As Range
With CreateObject("Scripting.Dictionary")
For Each rngCell In rng.Columns(1).Cells
Select Case True
Case strVal = ""
If Not .exists(rngCell.Offset(, ofset).Value) Then
.Add rngCell.Offset(, ofset).Value, i = i + 1
End If
Case Else
If strVal = rngCell.Value Then
If Not .exists(rngCell.Offset(, ofset).Value) Then
.Add rngCell.Offset(, ofset).Value, 1
End If
End If
End Select
Next
getlist = .keys
End With
End Function

Anzeige
AW: Abhängige Dropdowns
26.09.2022 22:58:35
Marcel
Die Doppelung und der Fehler im Code ist weg, super!
Jetzt bleibt nur noch ein Teil:
Wie muss der Code für den OK Button lauten, damit das 4-stellige Kürzel der jew. Produktuntergruppenbezeichnung in Zelle B6 erscheint?
AW: Abhängige Dropdowns
27.09.2022 08:08:04
ralf_b
vielleicht b6 = comboboxproduktuntergruppe.value ?
AW: Abhängige Dropdowns
27.09.2022 23:35:17
Marcel
Der folgende Code ist leider nicht ausreichend..

Private Sub CommandButton2_Click()
Range("B6").Value = cbProduktuntergruppe
End Sub
Ich brauche nämlich den Wert in Spalte "I" - also das 4-stellige Kürzel. Der Wert aus Spalte "I" darf aber nur eingetragen werden, wenn zuvor 3 Prüfungen erfüllt wurden:
1. Wert der Combobox1 = Wert in Spalte "D"
2. Wert der Combobox3 = Wert in Spalte "F"
3. Wert der Combobox3 = Wert in Spalte "H"
Userbild
Dann erst darf der Wert in Spalte "I" in Zelle B6 eingetragen werden.
Da hört es aber leider schon wieder mit meinen vba-Fähigkeiten auf ... :(
Anzeige
AW: Abhängige Dropdowns
28.09.2022 14:26:15
ralf_b
ja wie konnte ich das nur überlesen?

Private Sub CommandButton2_Click()
'ok
Dim arr, rng As Range, i&
If cbProduktklasse.Value = vbNullString Or _
cbProduktgruppe.Value = vbNullString Or _
cbProduktuntergruppe.Value = vbNullString Then MsgBox "Alle Felder füllen!": Exit Sub
Set rng = Range("tblDatenquelle[[Produktklasse]:[Kürzel Produktuntergr.]]")
arr = rng
For i = LBound(arr) To UBound(arr)
If arr(i, 1) = cbProduktklasse.Value And _
arr(i, 3) = cbProduktgruppe.Value And _
arr(i, 5) = cbProduktuntergruppe.Value Then
Worksheets("Übersicht").Range("B6") = arr(i, 6)
Unload Me
End If
Next
End Sub

Anzeige
AW: Abhängige Dropdowns
29.09.2022 22:56:27
Marcel
Es funktioniert, genial !
Vielen Dank Ralf !!

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige