Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1584to1588
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

dreifache Combobox

dreifache Combobox
18.10.2017 13:22:52
Andre
Hallo zusammen,
ich habe eine Frage zum Befüllen von Comboboxen in Abhängigkeit zueinander.
Folgender Aufbau:
Ich habe insgesamt 4 Spalten, die ab Zeile 4 Informationen beinhalten
Ich möchte aus Spalte A die Combobox 1 füllen (mehrfach vorkommende Begriffe werden gefiltert)
Combobox 2 wird dann in Abhängigkeit zum Inhalt Combobox 1 gefüllt
' ComboBox2.AddItem Description.Offset(, 1)
Jetzt möchte ich die 3. Combobox aus Spalte C füllen, in Abhängigkeit von der Auswahl der Comboboxen 1 & 2
Das bekomme ich irgendwie nicht hin. Welchen Code benötige ich, um die dritte Combobox zu füllen?
Ein weitere Frage: Ich möchte dann aus Spalte D in eine TextBox einen Wert wiedergeben, der alle zuvor genannten Kriterien (Auswahl der Comboboxen) erfüllt.
Das ist mein aktueller Code:
Private Sub UserForm_Initialize()
Dim ws As Worksheet
Dim rCell As Range
Set ws = Worksheets("Tabelle1")
With Worksheets("Tabelle1")
ComboBox1.List = .Range("A4:A" & .Range("A" & .Rows.Count).End(xlUp).Row).Value
End With
'//Clear combobox
'ComboBox1.Clear
'ComboBox2.Clear
'ComboBox3.Clear
With CreateObject("Scripting.Dictionary")
For Each rCell In ws.Range("A4", ws.Cells(Rows.Count, "A").End(xlUp))
If Not .exists(rCell.Value) Then
.Add rCell.Value, Nothing
End If
Next rCell
ComboBox1.List = .keys
End With
End Sub
Private Sub ComboBox1_Change()
Dim Description As Range
Dim Description_List As Range
Dim strSelected As String
Dim LastRow As Long
If ComboBox1.ListIndex  -1 Then
strSelected = ComboBox1.Value
LastRow = Worksheets("Tabelle1").Range("A" & Rows.Count).End(xlUp).Row
'           LastRow = ws.Range("A" & Rows.Count).End(xlUp).Row
Set Description_List = Worksheets("Tabelle1").Range("A4:A" & LastRow)
For Each Description In Description_List
If Description.Value = strSelected Then
ComboBox2.AddItem Description.Offset(, 1)
End If
Next Description
End If
End Sub
Besten Dank Euch allen für jeden Hinweis!
VG, Andre

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: dreifache Combobox
18.10.2017 13:42:58
Nepumuk
Hallo,
leg deine Listen waagrecht an.
Liste CB1 Spalte A
Auswahl in CB1 1. Eintrag = Liste CB2 Spalte B
Auswahl in CB1 2. Eintrag = Liste CB2 Spalte C
usw. bis z.B. Spalte Z als Listen für CB2
Auswahl aus CB2 1. Eintrag - Daten aus Spalte B = Liste für CB3 aus Spalte AA
Auswahl aus CB2 2. Eintrag - Daten aus Spalte B = Liste für CB3 aus Spalte AB
Auswahl aus CB2 1. Eintrag - Daten aus Spalte Z = Liste für CB3 aus Spalte xn
Das Ganze sind nur einfache Additionen.
Gruß
Nepumuk
AW: dreifache Combobox
18.10.2017 13:49:41
Andre
Hi Nepumuk,
dankeschön für deinen Vorschlag.
Der Aufbau der Tabelle kann leider nicht verändert werden.
Die Tabelle kommt von woanders und es wäre zu kompliziert, für den Anwender immer eine Umorientierung vornehmen zu müssen. Ich müsste irgendwie eine Lösung im VBA Code realisieren können mit den bestehenden Spalten. Inhalt der Zellen sind Wörter und Zahlen.
Danke schon mal und Grüße,
Andre
Anzeige
AW: dreifache Combobox
18.10.2017 14:01:22
Andre
Sorry, habe vergessen das Kontrollkästchen zu aktivieren.
Würde mich so freuen, wenn mich jemand unterstützen könnte.
Besten Dank!
Andre
AW: dreifache Combobox
18.10.2017 14:14:29
Nepumuk
Hallo Andre,
dann ist ohne die Tabelle zu kennen keine Hilfe möglich.
Erstell mal ein Beispiel und lade es hoch.
Gruß
Nepumuk
AW: dreifache Combobox
18.10.2017 16:30:04
Nepumuk
Hallo Andre,
ich hab da ein paar Unstimmigkeiten in deiner Liste gefunden. Es gibt von verschiedenen Blechen mit dem selben Material und der selben Stärke unterschiedliche Preise. Welcher ist in so einem Fall gültig?
Blech16Mo36077,5638679
Blech16Mo36078,9911714

Gruß
Nepumuk
Anzeige
AW: dreifache Combobox
18.10.2017 16:48:54
Andre
Hi Nepumuk,
das war ein Versehen. Sollte nur einen Preis geben. Doppelte Datensätze können eliminiert werden.
VG
AW: dreifache Combobox
18.10.2017 17:15:35
Nepumuk
Hallo Andre,
teste mal:
Option Explicit

Private mobjArrayList As Object

Private Sub UserForm_Initialize()
    
    Dim avntValues As Variant, vntItem As Variant
    
    Set mobjArrayList = CreateObject("System.Collections.ArrayList")
    
    With Worksheets("Tabelle1")
        avntValues = .Range(.Cells(4, 1), .Cells(.Rows.Count, 1).End(xlUp)).Value
    End With
    
    With mobjArrayList
        For Each vntItem In avntValues
            vntItem = Trim$(vntItem)
            If Not .Contains(vntItem) Then Call .Add(vntItem)
        Next
        Call .Sort
        ComboBox1.List = .ToArray
    End With
    
End Sub

Private Sub UserForm_Terminate()
    Set mobjArrayList = Nothing
End Sub

Private Sub ComboBox1_Change()
    
    Dim avntValues As Variant
    Dim ialngIndex As Long
    Dim strSelected As String
    
    Call mobjArrayList.Clear
    
    If ComboBox1.ListIndex <> -1 Then
        
        strSelected = ComboBox1.Value
        
        With Worksheets("Tabelle1")
            avntValues = .Range(.Cells(4, 1), .Cells(.Rows.Count, 2).End(xlUp)).Value
        End With
        
        TextBox1.Text = vbNullString
        ComboBox2.ListIndex = -1
        
        With mobjArrayList
            For ialngIndex = 1 To UBound(avntValues)
                If avntValues(ialngIndex, 1) = strSelected Then
                    avntValues(ialngIndex, 2) = Trim$(avntValues(ialngIndex, 2))
                    If Not .Contains(avntValues(ialngIndex, 2)) Then Call .Add(avntValues(ialngIndex, 2))
                End If
            Next
            Call .Sort
            ComboBox2.List = .ToArray
        End With
    End If
    
    ComboBox3.ListIndex = -1
    Call ComboBox3.Clear
    
End Sub

Private Sub ComboBox2_Change()
    
    Dim avntValues As Variant
    Dim ialngIndex As Long
    Dim strSelected1 As String, strSelected2 As String
    
    Call mobjArrayList.Clear
    
    If ComboBox2.ListIndex <> -1 Then
        
        strSelected1 = ComboBox1.Value
        strSelected2 = ComboBox2.Value
        
        With Worksheets("Tabelle1")
            avntValues = .Range(.Cells(4, 1), .Cells(.Rows.Count, 4).End(xlUp)).Value
        End With
        
        TextBox1.Text = vbNullString
        
        With ComboBox3
            
            .ListIndex = -1
            Call .Clear
            
            For ialngIndex = 1 To UBound(avntValues)
                If Trim$(avntValues(ialngIndex, 1)) = strSelected1 And Trim$(avntValues(ialngIndex, 2)) = strSelected2 Then
                    Call .AddItem(avntValues(ialngIndex, 3))
                    .List(.ListCount - 1, 1) = avntValues(ialngIndex, 4)
                End If
            Next
        End With
    End If
End Sub

Private Sub ComboBox3_Change()
    With ComboBox3
        If .ListIndex <> -1 Then TextBox1.Text = .List(.ListIndex, 1)
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: dreifache Combobox
18.10.2017 19:16:55
Andre
Werde gleich morgen Vormittag mal testen! Bin schon ganz gespannt ob es klappt. Vielen Dank für den Code!
Viele Grüße,
Andre
AW: dreifache Combobox
19.10.2017 07:35:28
Andre
Nepumuk,
works like a charm! Vielen Dank.
Wenn ich den Code sehe: Ich hätte das niemals so hinbekommen.
Er schreibt also alle hintereinander in ein array und vergleicht dann mittels ListIndex, wie der Preis lautet? Gibt es denn für diesen Code Einschränkungen oder spielt es keine Rolle was dort in den Spalten drin steht.
Vielen, vielen Dank für die Unterstützung!
VG, Andre
AW: dreifache Combobox
19.10.2017 11:05:46
Nepumuk
Hallo Andre,
nein. Der Code schreibt den Preis in eine zweite Spalte der Combobox die hat aber die Breite 0 Pt. daher ist sie nicht sichtbar.
Gruß
Nepumuk
Anzeige
AW: dreifache Combobox
18.10.2017 18:44:04
Luschi
Hallo Andre,
hier mal ein Lösungsvorschlag auf Basdis von ADODB, einer Datenbanktechnologie, die das Betriebssystem seit WinXP mitbringt und auch in Excel angewendet werden kann.
Die Datentabelle habe ich in eine 'formatierte Tabelle' umgewandelt mit dem Namen 'DatenListe' und die Zellenwerte der Spalte 'Dicke' in Text umgewandelt, da ADODB gleiche Datentypen je Spalte (Datenfeld) erwartet; '114x12' läßt sich nun mal nicht in numerisch umwandeln.
https://www.herber.de/bbs/user/117065.xlsm
Gruß von Luschi
aus klein-Paris
Anzeige
AW: dreifache Combobox
19.10.2017 11:04:51
Luschi
Hallo Andre,
schade, daß Du Dich nicht für ADODB-Variante interessierst, denn hier sind die Möglichkeiten durch die SQL-Abfragesprache-Technologie viel interessanter, besonderst dann, wenn noch WildCards eine Rollen spielen, wie:
K20*234; also alles was mit K20 beginnt und auf 234 endet.
Die SQL-Zeile zu ändern, ist ein Kinderspiel, aber die For-Schleifen-Logik anzupassen bei veränderten Voraussetzungen artet schon in Arbeit aus.
Gruß von Luschi
aus klein-Paris
Warum um Himmelswillen Cbx? Autofilter!! (owT)
18.10.2017 15:50:57
EtoPHG

AW: Warum um Himmelswillen Cbx? Autofilter!! (owT)
18.10.2017 16:53:23
Andre
Hi EtoPHG,
schaue ich mir gerne an! Jedoch soll abhängige eine Auswahl und keine manuelle Eingabe stattfinden.
VG
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige