ListBox durch abhängige Kombinationsboxen füllen

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
Bild

Betrifft: ListBox durch abhängige Kombinationsboxen füllen
von: Markus
Geschrieben am: 27.10.2015 23:09:23

Liebes Forum,
ich habe folgendes Anliegen.
Ich will mir für meine Tabelle einen Filter erstellen, welcher mir immer die jeweiligen Mitarbeiter mit dem gewünschten Kenntnisstand anzeigt.
Leider habe ich in keinem Forum eine Antwort auf mein Anliegen gefunden, aber erste Programm-Codes (z.B. j-hennekes.de) bereits eingebaut.
Bis Private Sub CombBox3_Enter() konnte ich mich einigermaßen durchkämpfen, danach brauche ich bitte eure Unterstützung.Ich habe mal meinen Versuch hochgeladen.
Bsp: Ich wähle als Land Deutschland aus, danach Produkt 1 und Kenntnisstand gut
Anschließend sollten dann die Namen Hans und Peter in der Liste erscheinen.
Bsp: Ich wähle als Land die Schweiz, danach Produkt 3 und den Kenntnisstand schlecht
Anschließend sollte der Name Horst in der LisBox erscheinen.
https://www.herber.de/bbs/user/101084.xlsm
Vielen Dank.

Bild

Betrifft: AW: ListBox durch abhängige Kombinationsboxen füllen
von: Markus
Geschrieben am: 27.10.2015 23:13:39
Hier noch der Code:
Option Explicit
Const C_mstrDatenblatt As String = "Tabelle1"
Dim mobjDic As Object
Dim mlngLast As Long
Dim Spalte As Integer
Dim ZeileMax As Long
Dim Zeile As Long
Dim Treffer As Range
Dim mlngZ As Long

Private Sub ComboBox1_Enter()
Set mobjDic = CreateObject("Scripting.Dictionary")
For mlngZ = 2 To mlngLast
mobjDic(Worksheets(C_mstrDatenblatt).Cells(mlngZ, 1).Value) = 0
Next
Me.ComboBox1.List = mobjDic.keys
Set mobjDic = Nothing
End Sub

Private Sub ComboBox2_Enter()
Set mobjDic = CreateObject("Scripting.Dictionary")
With Worksheets(C_mstrDatenblatt)
For mlngZ = 2 To mlngLast
Next
End With
Me.ComboBox2.Column = Range("C1:E1").Value
End Sub

Private Sub ComboBox3_Enter()
'Ab hier weiß ich nicht weiter
'in der ComboBox_3 sollen die 3 Auswahlmöglichkeiten: "Schlecht, Mittel, Gut" stehen
Me.ComboBox3.Clear
With Worksheets(C_mstrDatenblatt)
Set Treffer = .Rows(1).Find(what:=Me.ComboBox2.Value, lookat:=xlWhole)
If Not Treffer Is Nothing Then
Spalte = Treffer.Column
ZeileMax = .Cells(.Rows.Count, Spalte).Ende(xlUp).Row
For Zeile = 2 To ZeileMax
Me.ComboBox3.AddItem .Cells(Zeile, Spalte).Value
Next Zeile
Me.ComboBox3.ListIndex = 0
End If
End With
End Sub
Private Sub ComboBox3_Change()
'Die ListBox soll sich anhand der in ComboBox_3 getroffenen Wahl mit den jewiligen Namen füllen
With ListBox1.RowSource = "Tabelle1!B2:B5"
End With
End Sub

Private Sub CommandButton1_Click()
Unload Me
End Sub

Private Sub UserForm_Initialize()
mlngLast = Worksheets(C_mstrDatenblatt).Cells(Rows.Count, 1).End(xlUp).Row
End Sub


Bild

Betrifft: AW: ListBox durch abhängige Kombinationsboxen füllen
von: Beverly
Geschrieben am: 28.10.2015 08:17:35
Hi Markus,

Private Sub ComboBox3_change()
    Dim strStart As String
    Set Treffer = Columns(1).Find(ComboBox1.Value, lookat:=xlWhole)
    If Not Treffer Is Nothing Then
        strStart = Treffer.Address
        Do
            ListBox1.AddItem Cells(Treffer.Row, 2)
            Set Treffer = Columns(1).FindNext(Treffer)
        Loop While Not Treffer Is Nothing And Treffer.Address <> strStart
    End If
    Set Treffer = Nothing
End Sub




Bild

Betrifft: AW: ListBox durch abhängige Kombinationsboxen füllen
von: Markus
Geschrieben am: 28.10.2015 16:13:23
Hallo Beverly, liebes Forum,
vielen Dank für deine schnelle Hilfe.
Mein Problem ist jetzt die Private Sub ComboBox_3 Enter( ) : Wie kann ich mir da, nur die Kenntnisstände des in ComboBox 2 gewählten Produkts anzeigen lassen (ohne Duplikate)?
Dein Code funktioniert prima, aber er zeigt mir leider alle Mitarbeiter des gewählten Landes an ... unabhängig vom zuvor gewählten Kenntnisstand. Wie kann man da eine Abhängigkeit herstellen?

Bild

Betrifft: AW: ListBox durch abhängige Kombinationsboxen füllen
von: Beverly
Geschrieben am: 28.10.2015 19:40:20
Hi Markus,
im Anhang einmal das was ich aus deinem Beitrag interpretiert hätte.
Aber: wäre es nicht besser, anstatt in die Combobox3 die Prädikate (ohne Duplikate) generell für das ausgewählte Produkt einzulesen nur die (ohne Duplikate) einzulesen, die zum Produkt aus ComboBox2 UND dem ausgewählten Land aus ComboBox1 gehören?
https://www.herber.de/bbs/user/101106.xlsm




Bild

Betrifft: AW: ListBox durch abhängige Kombinationsboxen füllen
von: Markus
Geschrieben am: 28.10.2015 22:33:27
Hallo Beverly,
vielen Dank, genau so habe ich es mir vorgestellt :)
Noch eine Idee ist mir gekommen: wenn ich meine Auswahl (steht in ListBox) in Tabelle 2 kopieren will

Private Sub CommandButton2_Click( )
With Worksheets (Tabelle2)
.cells(.cells(Rows.Count, 1).End(xlUp).Row+1, 1).Value = Me.ComboBox1.Value
.cells(.cells(Rows.Count, 2).End(xlUp).Row+1, 2).Value = Me.ComboBox2.Value
.cells(.cells(Rows.Count, 3).End(xlUp).Row+1, 3).Value = Me.ComboBox3.Value
End With
Sheets("Tabelle2"). Range("D2").Resize(ListBox1.ListCount, ListBox1.ColumnCount).Value =  _
ListBox1.List
' Wie kann ich hier einstellen, dass die Namen in der ListBox1 immer nach dem letzten  _
vorhergehenden Wert in die Spalte D in Tabelle 2 eingetragen werden?
End Sub
Danke

Bild

Betrifft: AW: ListBox durch abhängige Kombinationsboxen füllen
von: Beverly
Geschrieben am: 29.10.2015 07:38:02
Hi Markus,

Private Sub CommandButton2_Click()
    Dim lngErste As Long
    With Worksheets("Tabelle2")
        lngErste = .Cells(Rows.Count, 4).End(xlUp).Row + 1
        .Cells(lngErste, 1).Value = Me.ComboBox1.Value
        .Cells(lngErste, 2).Value = Me.ComboBox2.Value
        .Cells(lngErste, 3).Value = Me.ComboBox3.Value
        .Cells(lngErste, 4).Resize(ListBox1.ListCount, _
            ListBox1.ColumnCount).Value = ListBox1.List
    End With
End Sub




Bild

Betrifft: AW: ListBox durch abhängige Kombinationsboxen füllen
von: Markus
Geschrieben am: 29.10.2015 22:01:42
Hallo Beverly,
überragend!! Herzlichen Dank nochmal. :)

 Bild

Beiträge aus den Excel-Beispielen zum Thema "ListBox durch abhängige Kombinationsboxen füllen"