Listbox von Combobox abhängig machen

Hey ho,

ich habe mich ein wenig sehr festgefahren bei meier Userform und hoffe Ihr könnt mir helfen.

Also ich habe eine Excelmappe mit 3 Tabellen. Sinn der Sache soll eine art Mieterverwaltung sein.

-> in Tabelle 2 A2:A48 befinden sich alle Gebäude
-> in Tabelle 1 A1:A446 befinden sich die Mieter
-> in Tabelle 1 C1:C446 befinden sich die Gebäude in denen die Mieter Wohnen

Was ich vorhab:

Ich will eine Combobox erstellen mit der ich ein Gebäude auswählen kann.
In einer Listbox sollen dann die dazugehörigen Mieter angezeigt werden.
Da ich neuling auf dem Gebiet bin habe ich keinen Plan wie ich das anstellen soll. Hab schon diverse Vorlagen und beispiele ausprobiert komme aber leider nicht auf eine Lösung. Könnt ihr mir Helfen?

Hallo.

-> in Tabelle 2 A2:A48 befinden sich alle Gebäude
-> in Tabelle 1 A1:A446 befinden sich die Mieter
-> in Tabelle 1 C1:C446 befinden sich die Gebäude in denen die
Mieter Wohnen

Ich will eine Combobox erstellen mit der ich ein Gebäude
auswählen kann.
In einer Listbox sollen dann die dazugehörigen Mieter
angezeigt werden.

Mit dem folgenden Code im Codefenster Deiner UserForm erreichst Du die Funktion entsprechend Deiner Beschreibung:

Private Sub ComboBox1\_Change()

 Const MieterName As Long = 1 'Tabelle 1, Saplte A
 Const MieterGebaeude As Long = 3 'Tabelle 1, Spalte C
 Dim MieterAusZeile As Long

 Const GebaeudeNr As Long = 1 'Tabelle 2, Spalte A
 Dim Gebaeude As String

 ListBox1.Clear
 Gebaeude = Tabelle2.Cells(ComboBox1.ListIndex + 2, GebaeudeNr)
 For MieterAusZeile = 1 To CLng(Tabelle1.Range("A" & CStr(Tabelle1.Rows.Count)).End(xlUp).Row)
 If Tabelle1.Cells(MieterAusZeile, MieterGebaeude) = Gebaeude Then
 ListBox1.AddItem Tabelle1.Cells(MieterAusZeile, MieterName)
 End If
 Next MieterAusZeile

End Sub

Private Sub UserForm\_Initialize()

 ComboBox1.RowSource = "Tabelle2!$A$2:blush:A$" & CStr(Tabelle2.Range("A" & CStr(Tabelle2.Rows.Count)).End(xlUp).Row)
 ComboBox1.ListIndex = 0

End Sub

Eventuell ist eine Anpassung der Elemente-Namen erforderlich.
Die Konstanten habe ich nur deklariert, um den Wiedererkennungswert innerhalb der For-Next-Schleife zu erhöhen.

VG
Carsten

Hey Carsten vielen Dank für die Antwort,
habe den Code übernommen und angepasst. Leider erscheinen in der Listbox keine Daten, woran könnte das liegen ?

VG Gordi

habe den Code übernommen und angepasst. Leider erscheinen in
der Listbox keine Daten, woran könnte das liegen ?

Hallo Gordi,

das kann an vielem liegen, zeige mal den angepassten Code.

Gruß
Reinhard

Hoffe ich hab alles kopiert:

Private Sub Gebäude_Change()
Const MieterName As Long = 1 'Tabelle 1, Saplte A
Const MieterGebaeude As Long = 3 'Tabelle 1, Spalte C
Dim MieterAusZeile As Long

Const GebaeudeNr As Long = 1 'Tabelle 2, Spalte A
Dim Gebaeude As String

ListBox1.Clear
Gebaeude = Tabelle2.Cells(Gebäude.ListIndex + 1, GebaeudeNr)
For MieterAusZeile = 1 To CLng(Tabelle1.Range(„A“ & CStr(Tabelle1.Rows.Count)).End(xlUp).Row)
If Tabelle1.Cells(MieterAusZeile, MieterGebaeude) = Gebaeude Then
ListBox1.AddItem Tabelle1.Cells(MieterAusZeile, MieterName)
End If
Next MieterAusZeile

End Sub

Private Sub UserForm_Initialize()
Dim Zeile As Integer
For Zeile = 1 To 13
ComboBox2.AddItem Format(Sheets(„Tabelle2“).Cells(Zeile, 2), „dd.mm.yyyy“)
Next Zeile
Gebäude.RowSource = „Tabelle2!$A$2:blush:A$“ & CStr(Tabelle2.Range(„A“ & CStr(Tabelle2.Rows.Count)).End(xlUp).Row)
Gebäude.ListIndex = 0
End Sub

Gebäude.RowSource = „Tabelle2!$A$2:blush:A$“ &
CStr(Tabelle2.Range(„A“ &
CStr(Tabelle2.Rows.Count)).End(xlUp).Row)

Hallo Gordi,

bin jetzt mal für ne Stunde weg.
Was mir ins Auge fiel, Rows.Count ist in allen Blättern einer mappe logischerweise identisch, also ist Tabelle2.Rows.Count nicht notwendig, Nur Rows.Count reicht. CStr ist hier auch nicht nötig.
Probiers mal so:

Gebäude.RowSource = „Tabelle2!$A$2:blush:A$“ & Tabelle2.Range(„A“ & Rows.Count).End(xlUp).Row

Wohlgemerkt, dies sind keinesfalls Fehler. In anderen Fällen muß man sehr wohl manuell mit CStr, CLng usw. umwandeln bzw. mit Blattname und Punkt genauestens referenzieren.

Bis nachher.

Gruß
Reinhard

Also ich habs mal geändert:

Private Sub Gebäude_Change()
Const MieterName As Long = 1 'Tabelle 1, Saplte A
Const MieterGebaeude As Long = 3 'Tabelle 1, Spalte C
Dim MieterAusZeile As Long

Const GebaeudeNr As Long = 1 'Tabelle 2, Spalte A
Dim Gebaeude As String

ListBox1.Clear
Gebaeude = Tabelle2.Cells(Gebäude.ListIndex + 1, GebaeudeNr)
For MieterAusZeile = 1 To CLng(Tabelle1.Range(„A“ & CStr(Tabelle1.Rows.Count)).End(xlUp).Row)
If Tabelle1.Cells(MieterAusZeile, MieterGebaeude) = Gebaeude Then
ListBox1.AddItem Tabelle1.Cells(MieterAusZeile, MieterName)
End If
Next MieterAusZeile

End Sub

Private Sub UserForm_Initialize()
Dim Zeile As Integer
For Zeile = 1 To 13
ComboBox2.AddItem Format(Sheets(„Tabelle2“).Cells(Zeile, 2), „dd.mm.yyyy“)
Next Zeile
Gebäude.RowSource = „Tabelle2!$A$2:blush:A$“ & CStr(Tabelle2.Range(„A“ & CStr(Tabelle2.Rows.Count)).End(xlUp).Row)
Gebäude.ListIndex = 0
End Sub

Funktionieren tuts leider immer noch nicht, er zeigt mir einfach keine Werte in der Listbox

kann es eventuell daran liegen, das ich per Multipage die Tabelle 4 aktiviere ??

Hallo.

Gebaeude = Tabelle2.Cells(Gebäude.ListIndex + 1, GebaeudeNr)

Ob es an der obigen Zeile liegt, kann ich jetzt im Moment nicht sagen.
Jedenfalls hast Du hier geschrieben:

...Gebäude.Listindex + 1

Ist hier Gebaeude (Gebäude) richtig buchstabiert?
Stimmt „+1“, wenn Deine Gebäude erst in Zeile 2 beginnen? (Das hattest Du zumindest geschrieben und der ListIndex beginnt immer mit 0)

Überprüfe bitte mal genau die Systax. Bei VBA ist es so, dass Du Variablen eigentlich nicht speziell deklarieren mußt. VBA übernimmt diese Aufgabe, sofern es notwendig wird, automatisch.

Du solltest Dir aber angewöhnen, Variablen immer selber zu deklarieren.
Und: Du solltest lieber nicht darauf verzichten, die Datentypen-Umwandlungsfunktionen anzuwenden. (Schade, dass es in VBA OptionStrict nicht gibt)

VG
Carsten