Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

UF mit 2 Listboxen

Betrifft: UF mit 2 Listboxen von: Stefan Glander
Geschrieben am: 05.11.2014 16:39:01

Hallo Forum,
nun war ich froh das ich eine Listbox mit leben erwecken kann.
Was stelle ich nun fest. Irgendwie sind meine Daten nich in der richtigen Reihenfolge angeordnet (Senkrecht / Waagerecht)

Ich bitte um Hilfe.

Ich habe eine Datei erstellt damit niemand das Ding nachbauen muss.
In der Datei sind 2 UF. Die 1 haut auch so hin wie geplant, das paßt abe rmit meinen Daten nicht.
Die Zweite UF bezieht ihre Daten aus Tabellenblatt4.
Erreichen möchte ich nun folgendes:
Beim Aufruf der UF2 soll die Listbox1 mit den Werten im Bereich B2:B9 aufgefüllt werden.
Dabei sollen die doppelten Werte aber nicht angezeigt werden.
Wird nun der Wert in Zelle B3, in meinem Beispiel Deutschland angeklickt,
sollen in der Listbox 2 alle Städte aus Deutschland mit den dazugehörigen
Werten aus den Spalten D und E angezeigt werden.
Wenn sich jemand die Mühe macht mir zu helfen hab ich noch eine Bitte.
Bitte viele Kommentare verwenden damit ich es begreife, weil ich würde es gerne lernen und verstehen. Ich habe immer noch große Probleme Zellen mit Rows und Cells
anzusprechen. Da beides Möglich ist wäre es toll beide Varianten einmal zu sehen.
So unter dem Motte Tabellenblat1,A1:B3 sieht dann so aus ??? Sheet 1 ja und dann weiß ich schon nicht.
Ich danke im Vorfeld für Mühe und Zeit
Stefan

https://www.herber.de/bbs/user/93575.xlsm

  

Betrifft: AW: UF mit 2 Listboxen von: Rudi Maintaire
Geschrieben am: 05.11.2014 17:08:01

Hallo,

Private Sub ListBox1_Click()
  With ListBox2
    .Clear
    .ColumnCount = 3
  End With
  With Sheets(3)
    For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row
      If .Cells(i, 2) = ListBox1 Then
        ListBox2.AddItem .Cells(i, 3)
        ListBox2.List(ListBox2.ListCount - 1, 1) = .Cells(i, 4)
        ListBox2.List(ListBox2.ListCount - 1, 2) = .Cells(i, 5)
      End If
    Next
  End With
End Sub

Private Sub UserForm_Initialize()
  Dim objDic As Object, rngC As Range
  Set objDic = CreateObject("Scripting.dictionary")
  With Sheets(3)
    For Each rngC In .Range(.Cells(2, 2), .Cells(Rows.Count, 2).End(xlUp))
      objDic(rngC.Value) = 0
    Next
  End With
  ListBox1.List = objDic.keys
End Sub
Ein Dictionary stellt eine Sammlung von Schlüssel-Wert-Paaren dar. Da es jeden Schlüssel nur einmal geben kann, hat mat schnell und komfortabel eine Liste mit einmaligen Werten.

Gruß
Rudi


  

Betrifft: AW: UF mit 2 Listboxen von: Stefan Glander
Geschrieben am: 05.11.2014 19:01:18

Hallo Rudi, vorweg, Danke.
Nun aber meine Verständnis Fragen: (Und ich habe schon experimentiert, bekomme es aber nicht hin.)
Frage 1.) Wenn ich nun als Index nicht die Spalte B möchte sondern die Spalte D ( alles was dann links davon steht ist nicht wichtig) wie muss ich wo was ändern?
Frage 2.) Habe eine 3 und 4 Listbox eingebaut.
Das Blatt 3 habe ich in der Spalte I um Namen, Peter Paul, Mary, erweitert.
In Spalte J stehen Personen die die Leute aus Spalte I kennen und in spalte K das Alter der Personen die in Spalte J stehen.
Kann mein Vorhaben in einer UF überhaupt klappen ?

Als Anlage wieder mein Bausatz

Gruß
Stefan

https://www.herber.de/bbs/user/93578.xlsm


  

Betrifft: AW: UF mit 2 Listboxen von: Rudi Maintaire
Geschrieben am: 05.11.2014 19:31:45

Hallo,
1.
die hinteren 2en in 4 ändern

Private Sub UserForm_Initialize()
  Dim objDic As Object, rngC As Range
  Set objDic = CreateObject("Scripting.dictionary")
  With Sheets(3)
    For Each rngC In .Range(.Cells(2, 2), .Cells(Rows.Count, 2).End(xlUp))
      objDic(rngC.Value) = 0
    Next
  End With
  ListBox1.List = objDic.keys
End Sub
2.
das geht genauso wie bei den ersten beiden Listboxen
Nur die ersten Namen aus I (Spalte 9) holen und die Bekannten und deren Alter aus J und K.
d.h.
Private Sub UserForm_Initialize()
  Dim objDic As Object, rngC As Range
  Set objDic = CreateObject("Scripting.dictionary")
  With Sheets(3)
    For Each rngC In .Range(.Cells(2, 2), .Cells(Rows.Count, 2).End(xlUp))
      objDic(rngC.Value) = 0
    Next
  End With
  ListBox1.List = objDic.keys
  objDic.RemoveAll  'Dictionary leeren
  With Sheets(3)
  For Each rngC In .Range(.Cells(2, 9), .Cells(Rows.Count, 9).End(xlUp))
      objDic(rngC.Value) = 0
    Next
  End With
  ListBox3.List = objDic.keys

End Sub

Gruß
Rudi


  

Betrifft: AW: UF mit 2 Listboxen von: Stefan Glander
Geschrieben am: 05.11.2014 20:22:09

Hallo Rudi,

irgendwie bekomme ich es nicht hin
Kannst Du bitte mal reinschauen

Gruß
Stefan

https://www.herber.de/bbs/user/93581.xlsm


  

Betrifft: AW: UF mit 2 Listboxen von: Crazy Tom
Geschrieben am: 05.11.2014 22:07:20

Hallo

hier der geänderte Code für Listbox3

Private Sub ListBox3_Click()
  With ListBox4
    .Clear
    .ColumnCount = 3  ' gibt an wieviele Spalten dargestellt werden sollen
  End With
  With Sheets(3)
    For i = 2 To .Cells(.Rows.Count, 9).End(xlUp).Row
      If .Cells(i, 9) = ListBox3 Then
        ListBox4.AddItem .Cells(i, 10) 'Erste Spalte aus denen Werte zugeordnet werden. Hier  _
die 10 Spalte (I)
        ListBox4.List(ListBox4.ListCount - 1, 1) = .Cells(i, 11) 'Zweite Spalte aus denen Werte  _
zugeordnet werden. Hier die 4 Spalte (J)
        ListBox4.List(ListBox4.ListCount - 1, 2) = .Cells(i, 12) 'Zweite Spalte aus denen Werte  _
zugeordnet werden. Hier die 4 Spalte (K)
        
      End If
    Next
  End With
End Sub

MfG Tom


  

Betrifft: AW: UF mit 2 Listboxen von: Stefan Glander
Geschrieben am: 06.11.2014 07:34:08

Guten Morgen Tom und Rudi,

vielleicht war es gestern schon etwas spät. Nachdem ich mir das nun angeschaut habe und es verglichen hab, verstehe ich heute nicht warum ich das gestern nicht hinbekommen habe.
Ich sage hier erst Einmal danke.

In Anlehnung an dieses Beispiel kommt bei mir nun aber folgende Überlegung und Frage.
Wenn ich zusätzlich 3 TextBoxen in die UF einbaue, um die Daten dann ggf später neu zu schreiben
erreiche ich das befüllen der TextBoxen mit

Private Sub ListBox2_Click()
TextBox1 = ListBox2.List(ListBox2.ListCount - 1, 0)
TextBox2 = ListBox2.List(ListBox2.ListCount - 1, 1)
TextBox3 = ListBox2.List(ListBox2.ListCount - 1, 2)
End Sub

Nun habe ich aber das Problem (siehe Mappe) wenn ich Deutschland in Listbox1 auswähle,
werden die passenden Städte in Listbox2 angezeigt. Dort stehen nun 4 Städte.
Wie erreiche ich den nun, dass ich Hamburg in die Textbox1 bekomme und nicht automatisch München drin steht.

Gruß
Stefan

https://www.herber.de/bbs/user/93588.xlsm


  

Betrifft: AW: UF mit 2 Listboxen von: Rudi Maintaire
Geschrieben am: 06.11.2014 09:12:07

Hallo,

Private Sub ListBox2_Click()
TextBox1 = ListBox2.List(ListBox2.ListIndex, 0)
TextBox2 = ListBox2.List(ListBox2.ListIndex, 1)
TextBox3 = ListBox2.List(ListBox2.ListIndex, 2)
End Sub

bzw. kürzer
Private Sub ListBox2_Click()
TextBox1 = ListBox2.Column(0)
TextBox2 = ListBox2.Column(1)
TextBox3 = ListBox2.Column(2)
End Sub
Gruß
Rudi


  

Betrifft: AW: Vielen Danke von: Stefan Glander
Geschrieben am: 06.11.2014 09:26:11

genauso sollte es sein.
Ich Danke Euch beiden für Eure Mühe und Geduld.

Stefan


  

Betrifft: AW: UF mit 2 Listboxen von: Crazy Tom
Geschrieben am: 06.11.2014 09:13:17

Hallo

so? (ungetestet)

Private Sub ListBox2_Click()
    With Listbox2
        TextBox1 = .List(.ListIndex)
        TextBox2 = .List(.ListIndex, 1)
        TextBox3 = .List(.ListIndex, 2)
    End With
End Sub

MfG Tom


  

Betrifft: Nachbrenner von: Stefan Glander
Geschrieben am: 06.11.2014 12:07:14

Mahlzeit,

ich habe noch einen Nachbrenner.
Im Moment befülle ich die beiden Listboxen ja wie folgt:

Private Sub ListBox1_Click()
       With ListBox2
         .Clear
         .ColumnCount = 4
       End With
       With Sheets(2)
         For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row
           If .Cells(i, 2) = ListBox1 Then
             ListBox2.AddItem .Cells(i, 3)
             ListBox2.List(ListBox2.ListCount - 1, 1) = .Cells(i, 4)
             ListBox2.List(ListBox2.ListCount - 1, 2) = .Cells(i, 5)
             ListBox2.List(ListBox2.ListCount - 1, 3) = .Cells(i, 6)
           End If
         Next
       End With
     End Sub

Private Sub UserForm_Initialize()
       Dim objDic As Object, rngC As Range
       Set objDic = CreateObject("Scripting.dictionary")
       With Sheets(2)
         For Each rngC In .Range(.Cells(2, 2), .Cells(Rows.Count, 2).End(xlUp))
           objDic(rngC.Value) = 0
         Next
       End With
       ListBox1.List = objDic.keys
     End Sub
Kann ich die Spaltenbreite der Listbox2 bestimmen?
Wenn ja wie / Wo muss sich was ändern?

Gruß
Stefan


  

Betrifft: AW: Nachbrenner von: Crazy Tom
Geschrieben am: 06.11.2014 12:55:37

Hallo

das könnte so gehen

Private Sub ListBox1_Click()
    With ListBox2
        .Clear
        .ColumnCount = 4
        .columnwidhts = "25;50;25;50"'<-- hier wird die Breite eingegeben
    End With
    With Sheets(2)
        For i = 2 To .Cells(.Rows.Count, 2).End(xlUp).Row
            If .Cells(i, 2) = ListBox1 Then
                ListBox2.AddItem .Cells(i, 3)
                ListBox2.List(ListBox2.ListCount - 1, 1) = .Cells(i, 4)
                ListBox2.List(ListBox2.ListCount - 1, 2) = .Cells(i, 5)
                ListBox2.List(ListBox2.ListCount - 1, 3) = .Cells(i, 6)
            End If
        Next
    End With
End Sub



  

Betrifft: AW: Nachbrenner von: Stefan Glander
Geschrieben am: 06.11.2014 15:28:23

Hallo Tom,
bekomme immer die Meldung:
Fehler beim Kompilieren
Methode oder Datenobjekt nicht gefunden

Gruß
Stefan


  

Betrifft: AW: Nachbrenner von: Crazy Tom
Geschrieben am: 06.11.2014 15:34:47

Hallo Stefan

da war ein Buchstabendreher drin

    With ListBox2
        .Clear
        .ColumnCount = 4
        .ColumnWidths = "25;50;25;50" '<-- hier wird die Breite eingegeben
    End With

so sollte es passen

MfG Tom


  

Betrifft: AW: Danke o.T von: Stefan Glander
Geschrieben am: 06.11.2014 16:15:31

.