Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: ListIndex in ListBox aufrufen

ListIndex in ListBox aufrufen
05.09.2019 11:26:37
Andreas
Hallo liebes Forum
Ich habe eine UserForm (UF_Verbraucher) mit einer Listbox, die mit Werten aus einer Tabelle gefüllt wird. Diese sind in 7 Spalten verteilt. Ich möchte einen Datensatz per Doppelklick in Textboxen anzeigen lassen und danach in eine andere Tabelle übertragen. Es scheint, als ob ich den Aufruf der Zeile in der Listbox falsch mache, jedenfalls gibt es einen Fehler oder die falsche Zeile wird ausgewählt. Ich tippe, dass ich den Zeilenindex falsch mache. Aber das ist nur die Meinung eines Laien, sicher hat jemand eine genauere Idee.
Sub lsb_VerbraucherListe_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim LB1 As Object
Dim tbx As TextBox
Dim c As Integer
Set LB1 = lsb_VerbraucherListe
With lsb_VerbraucherListe
tb_Bezeichnung = LB1.List(LB1.ListIndex, 0)
tb_VerbraucherName = LB1.List(LB1.BoundColumn, 1)
tb_VerbraucherTyp = LB1.List(LB1.BoundColumn, 2)
tb_VerbraucherKategorie = LB1.List(LB1.BoundColumn, 3)
tb_VerbraucherL1 = LB1.List(LB1.BoundColumn, 4)
tb_VerbraucherL2 = LB1.List(LB1.BoundColumn, 5)
tb_VerbraucherL3 = LB1.List(LB1.BoundColumn, 6)
Me.tb_VerbraucherZ1.SetFocus
End With
For c = 1 To 3
With Me.Controls("tb_VerbraucherL" & c)
.Locked = True
.BackColor = &H8000000F
End With
Next c
Me.tb_VerbraucherL2.Locked = True
Me.tb_VerbraucherL3.Locked = True
End Sub
https://www.herber.de/bbs/user/131858.xlsm
Anzeige

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: ListIndex in ListBox aufrufen
05.09.2019 11:35:19
Torsten
Hallo,
versuch mal
With LB1
tb_Bezeichnung = .List(.ListIndex, 0)
tb_VerbraucherName = .List(.BoundColumn, 1)
tb_VerbraucherTyp = .List(.BoundColumn, 2)
tb_VerbraucherKategorie = .List(.BoundColumn, 3)
tb_VerbraucherL1 = .List(.BoundColumn, 4)
tb_VerbraucherL2 = .List(.BoundColumn, 5)
tb_VerbraucherL3 = .List(.BoundColumn, 6)
Me.tb_VerbraucherZ1.SetFocus
End With

Anzeige
AW: ListIndex in ListBox aufrufen
05.09.2019 11:52:16
Andreas
Hallo Torsten
danke für die fixe Antwort. Leider löst das das Problem nicht. Index des Eigenschaftsfeldes ist ungültig.
Liebe Grüße
Andreas
AW: ListIndex in ListBox aufrufen
05.09.2019 11:45:49
GerdL
Moin
Sub lsb_VerbraucherListe_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim LB1 As Object
Dim tbx As TextBox
Dim c As Integer
Set LB1 = lsb_VerbraucherListe
With lsb_VerbraucherListe
tb_Bezeichnung = LB1.List(LB1.ListIndex, 0)
tb_VerbraucherName = LB1.List(LB1.ListIndex, 1)
tb_VerbraucherTyp = LB1.List(LB1.ListIndex, 2)
tb_VerbraucherKategorie = LB1.List(LB1.ListIndex, 3)
tb_VerbraucherL1 = LB1.List(LB1.ListIndex, 4)
tb_VerbraucherL2 = LB1.List(LB1.ListIndex, 5)
tb_VerbraucherL3 = LB1.List(LB1.ListIndex, 6)
Me.tb_VerbraucherZ1.SetFocus
End With
'...............

Gruß Gerd
Anzeige
AW: ListIndex in ListBox aufrufen
05.09.2019 11:55:59
Andreas
Hallo Gerd
Das gleiche Ergebnis: "Laufzeitfehler 381, Index des Eigenschaftsfeldes ist ungültig"
Ich hatte verstanden, dass sich der ListIndex auf die Zeile bezieht und CoulmnBound auf die Spalte. Habe ich wohl falsch verstanden. Jedenfalls macht beides das gleiche Ergebnis.
Gruß
Andreas
Anzeige
AW: ListIndex in ListBox aufrufen
05.09.2019 12:19:57
Torsten
Hallo,
nach einigem herumprobieren in deiner Datei hab ich den Fehler gefunden. Das Problem ist, dass du das Fuellen der Listbox immer wieder aufrufst nachdem eine Textbox gefuellt wurde. Damit stimmt dann die Zuordnung nicht mehr. Und zwar in der Textbox tb_Bezeichnung. Du hast hier den Code:

Sub tb_Bezeichnung_Change()
Bez = Me.tb_Bezeichnung.Text
Call Verbraucherlistefüllen
End Sub

Also bei jeder Aenderung in dieser Textbox wird die Listbox wieder neu gefuellt. Ich habe diese Zeile mal auskommentiert:
Call Verbraucherlistefüllen

Ausserdem auch noch die Aenderung von von Gerd ist wichtig.Ueberall auf Listindex aendern.
Jetzt funktionierts. Probiers aus.
Gruss Torsten
Anzeige
AW: ListIndex in ListBox aufrufen
05.09.2019 12:25:36
Werner
Hallo Andreas,
wenn du deine Textboxen umbenennst (fortlaufende Nummer) aufsteigend, so wie die Textboxen die Daten aus der jeweiligen Spalte der Listbox bekommen sollst, dann mit einer Schleife.
TextBox1 - Daten aus Listbox Spalte 0
TextBox2 - Daten aus Listbox Spalte 1
Textbox3 - Daten aus Listbox Spalte 2
usw.
Schau dir das Beispiel mal an.
https://www.herber.de/bbs/user/131861.xlsm
Gruß Werner
Anzeige
AW: ListIndex in ListBox aufrufen
05.09.2019 13:25:17
Andreas
Hallo Werner
danke erstmal. Leider kann ich dein Beispiel nicht öffnen. Wo finde ich es oder wie? Ich finde mich noch nicht ganz zurecht hier.
AW: ListIndex in ListBox aufrufen
05.09.2019 13:26:23
Torsten
Schau dir meinen letzten Beitrag an
AW: ListIndex in ListBox aufrufen
05.09.2019 15:13:09
Andreas
Hallo Torsten, hallo Werner
es klappt. Super! Vielen Dank für die tätige Hilfe! hat mich ein gutes Stück weitergebracht. Ich habe aber noch nicht ganz verstanden, warum die Routine durcheinander kommt, wenn ich sie über mehrere Ereignisse aufrufe. War das, weil die Änderung der einen TextBox die Listbox automatisch neu startete? Jedenfalls herzlichen Dank nochmal.
Viele Grüße
Andreas Grimm
Anzeige
AW: ListIndex in ListBox aufrufen
05.09.2019 15:25:59
Torsten
Genau das war das Problem, wie ich schon erklaert hatte.
Die Listbox wird geladen, dann doppelklickst du in die Listbox. Die Textbox Bezeichnung wird gefuellt. Dort wird dann das Textbox_Change Ereignis ausgeloest. Aber dort rufst du nochmal das Listbox Fuellen Makro auf, also wird die neu gefuellt und die Beziehungen zwischen den Spalten gehen verloren in dem Makro, dass die Textboxen fuellt.
Hoffe soweit klar.
Anzeige
Gerne u. Danke für die Rückmeldung. o.w.T.
05.09.2019 20:03:35
Werner
AW: ListIndex in ListBox aufrufen
05.09.2019 13:27:43
Werner
Hallo Andreas,
den Link markieren, rechte Maustaste auf den markierten Link, Link öffnen.
Gruß Werner
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

ListIndex in einer ListBox aufrufen


Schritt-für-Schritt-Anleitung

Um den ListIndex in einer ListBox korrekt anzuwenden, folge diesen Schritten:

  1. UserForm erstellen: Erstelle eine UserForm (z.B. UF_Verbraucher) mit einer ListBox (z.B. lsb_VerbraucherListe) und mehreren TextBoxen für die Anzeige der ausgewählten Daten.

  2. ListBox füllen: Stelle sicher, dass die ListBox mit den richtigen Daten aus einer Excel-Tabelle gefüllt wird.

  3. Doppelklick-Ereignis verwenden: Implementiere das DblClick-Ereignis der ListBox, um die ausgewählten Daten in die TextBoxen zu übertragen. Der Code könnte wie folgt aussehen:

    Sub lsb_VerbraucherListe_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
       Dim LB1 As Object
       Set LB1 = lsb_VerbraucherListe
       With LB1
           tb_Bezeichnung = .List(.ListIndex, 0)
           tb_VerbraucherName = .List(.ListIndex, 1)
           tb_VerbraucherTyp = .List(.ListIndex, 2)
           tb_VerbraucherKategorie = .List(.ListIndex, 3)
           tb_VerbraucherL1 = .List(.ListIndex, 4)
           tb_VerbraucherL2 = .List(.ListIndex, 5)
           tb_VerbraucherL3 = .List(.ListIndex, 6)
       End With
       Me.tb_VerbraucherZ1.SetFocus
    End Sub
  4. Textboxen konfigurieren: Vergewissere dich, dass die TextBoxen korrekt benannt sind und dass der ListIndex den richtigen Wert zurückgibt.


Häufige Fehler und Lösungen

  • Laufzeitfehler 381: Dieser Fehler tritt meist auf, wenn der ListIndex ungültig ist. Stelle sicher, dass die ListBox korrekt gefüllt ist und dass der ListIndex im gültigen Bereich liegt.

  • Falscher Index: Wenn du den ListIndex verwendest, achte darauf, dass du ihn an der richtigen Stelle anwendest. In vielen Beispielen wird BoundColumn genutzt, was zu Verwirrung führen kann. Nutze stattdessen immer .ListIndex.

  • ListBox wird neu gefüllt: Vermeide das erneute Füllen der ListBox, während du die TextBoxen aktualisierst. Dies kann die Zuordnung zwischen ListBox und TextBox durcheinanderbringen. Kommentiere den Aufruf für das Füllen der ListBox aus, wenn du die TextBox änderst.


Alternative Methoden

Eine alternative Methode zur Handhabung von ListIndex wäre die Verwendung von ComboBoxen, die ebenfalls den ListIndex unterstützen. Hier ist ein Beispiel:

Sub combobox_DblClick()
    With Me.ComboBox1
        TextBox1 = .List(.ListIndex, 0)
        TextBox2 = .List(.ListIndex, 1)
    End With
End Sub

Die Verwendung von ComboBox ist besonders sinnvoll, wenn du eine Auswahl von Werten mit Eingabemöglichkeiten kombinieren möchtest.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du eine ListBox füllen und den ListIndex nutzen kannst:

  1. Fülle die ListBox mit Daten:

    Sub Verbraucherlistefüllen()
       Dim i As Integer
       For i = 1 To 10
           lsb_VerbraucherListe.AddItem "Verbraucher " & i
       Next i
    End Sub
  2. Zeige die Werte in TextBoxen an, wenn ein Datensatz ausgewählt wird:

    Sub lsb_VerbraucherListe_Click()
       Dim selectedIndex As Integer
       selectedIndex = lsb_VerbraucherListe.ListIndex
       If selectedIndex <> -1 Then
           ' Beispiel für das Füllen der TextBoxen mit Werten
           tb_Bezeichnung = "Bezeichnung " & selectedIndex
       End If
    End Sub

Tipps für Profis

  • Verwendung von Arrays: Wenn du viele Werte hast, kann es effizient sein, diese in einem Array zwischenzuspeichern und die ListBox anschließend damit zu füllen.

  • Event-Handling optimieren: Achte darauf, dass du Ereignisse wie Change oder DblClick sinnvoll nutzt, um die Performance zu verbessern.

  • Debugging: Nutze Debug.Print in deinem VBA-Code, um den Wert des ListIndex in der Konsole anzuzeigen und sicherzustellen, dass du die richtigen Indizes verwendest.


FAQ: Häufige Fragen

1. Wie kann ich den ListIndex zurücksetzen? Um den ListIndex zurückzusetzen, kannst du den Wert auf -1 setzen:

lsb_VerbraucherListe.ListIndex = -1

2. Was ist der Unterschied zwischen ListIndex und BoundColumn? ListIndex gibt den aktuellen Zeilenindex zurück, während BoundColumn die Spalte angibt, die mit dem Wert der ListBox verbunden ist. Achte darauf, dass du ListIndex korrekt anwendest, um auf die ausgewählten Daten zuzugreifen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige