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?
-> 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.
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 ?
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
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:
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.
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
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)