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

markierte Einträge in einer ListBox

Forumthread: markierte Einträge in einer ListBox

markierte Einträge in einer ListBox
Jonathan
Hey,
sorry, für die vielen Fragen mal wieder! ;-(
Mir ist mal wieder etwas aufgefallen, was ich bisher einfach umgangen habe, in meinem jetzigen Projekt aber nicht kann...
Wenn ich mit Me.ListBox.List auf den ausgewählten Eintrag zugreife, muss dieser natürlich markiert sein. Allerdings gibt es scheinbar drei Varianten: nicht markiert, markiert aber nicht aktiv, markiert und aktiv. Im letzteren Fall ist um die blaue Markierung noch ein Rahmen.
Wenn ein Eintrag blau markiert aber nicht mit einem Rahmen versehen ist, ist der Wert mit .List nicht zu erhalten - dies verwirrt User natürlich immens, da blau meistens bedeutet: ausgewählt.
Gibt es eine Möglichkeit, auf die markierten aber nicht aktivierten Einträge zuzugreifen?
VG
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: markierte Einträge in einer ListBox
07.09.2011 02:49:08
fcs
Hallo Jonathan,
die Listboxen gibt es in 2 Varianten, wenn es um ausgewählte/aktive Einträge geht.
A) Multiselect = 0 (fmMultiSelectSingle)
B) MultiSelect = 1 (fmMultiSelectMulti) oder = 2 (fmMultiSelectExtended)
Variante A
hat: nichts gewählt (Listindex=-1) oder 1 Eintrag gewählt/farbig (Listindex >= 0)
Variante B
hat: nichts gewählt (Listindex=0), ein oder mehre Einträge sind gewählt (farbig, Selected-Eigenschaft dieser Einträge = True), der letzte gewählte (aktive) Eintrag hat einen Rahmen und kann farbig sein oder auch nicht. Der Rahmen spielt für die Auswertung keine Rolle. Der aktive Eintrag kann über den Listindex abgefragt werden.
Du solltest für die Listboxen die Eigenschaft "Liststyle" auf 1 = fmListStyleOption ändern.
Dann werden vor den Einträgen noch Bullets (Variante A) oder Checkboxen (Variante B) angezeigt.
Gruß
Franz
Anzeige
AW: markierte Einträge in einer ListBox
07.09.2011 14:24:33
Jonathan
Vielen Dank für die ausführliche Erklärung, leider kann ich damit mein Problem nicht beheben.
Zur Vorgehensweise:
Über ein Textfeld suche nach bestimmten Werten innerhalb eines Sheets, diese werden in einer ListBox aufgeführt. Markiere ich einen Eintrag in der Listbox und klicke dann auf einen Button, werden die Werte des ausgewählten Eintrages in verschiedene Textfelder - welche vorher mit durch die Auswahl eines Optionsfeldes selektiert wurden - geschrieben. Danach wird automatisch ein anderes Optionsfeld ausgewählt. Dies klappt auch super; aber:
Markiere ich einen Listeintrag und klicke auf den Button, ist der Eintrag zwar noch blau hinterlegt, allerdings nicht mehr ausgewählt. Klicke ich dann sofort erneut auf den Button (die Daten sollten dann in weitere Textfelder geschrieben werden), erhalte ich die Fehlermeldung:
"Eigenschaft List konnte nicht abgerufen werden. Index des Eigenschaftenfeldes ungültig."
Ich müsste vorher den Eintrag der Listbox erneut anwählen - dann funktioniert es.
Ich hoffe, Ihr könnt mir folgen?! ;-)
Hier der Code für das Übernehmen der Daten aus der Listbox:

Private Sub find_eintragen()
Dim booOptionClicked As Boolean
Dim opt_name As String
Dim opt_nr As Integer
For i = 1 To 20
If Me("opt" & i).Value = True Then
booOptionClicked = True
opt_name = Me("opt" & i).Caption
opt_nr = i
End If
Next i
If Not booOptionClicked Then
MsgBox "Bitte wählen Sie einen Datensatz", _
48, "   Hinweis für " & Application.UserName
Me.lbox_find.SetFocus
Exit Sub
End If
uf_haupt("com_buchungsart" & opt_nr).Value = Me.lbox_find.List(Me.lbox_find.ListIndex, 0)
uf_haupt("com_ok" & opt_nr).Value = Me.lbox_find.List(Me.lbox_find.ListIndex, 1)
uf_haupt("com_uk" & opt_nr).Value = Me.lbox_find.List(Me.lbox_find.ListIndex, 2)
uf_haupt("com_uk2" & opt_nr).Value = Me.lbox_find.List(Me.lbox_find.ListIndex, 3)
uf_haupt("txt_kommentar" & opt_nr).Value = Me.lbox_find.List(Me.lbox_find.ListIndex, 4)
uf_haupt("txt_betrag" & opt_nr).SetFocus
uf_haupt("opt" & opt_nr + 1).Value = True
End Sub

Anzeige
AW: markierte Einträge in einer ListBox
07.09.2011 18:07:11
Jonathan
Wenn ich vorher separat SetFocus auf die ListBox setze, klappt es! ;-)
;
Anzeige
Anzeige

Infobox / Tutorial

Markierte Einträge in einer ListBox verwalten


Schritt-für-Schritt-Anleitung

  1. ListBox erstellen: Füge eine ListBox in dein Excel-Projekt ein. Stelle sicher, dass die ListBox die Eigenschaft "MultiSelect" auf die gewünschte Variante setzt (0 für Einzel- und 1 oder 2 für Mehrfachauswahl).

  2. Daten in die ListBox laden: Verwende VBA, um die ListBox mit Werten aus einem Arbeitsblatt zu füllen. Beispiel:

    Private Sub UserForm_Initialize()
        Dim i As Integer
        For i = 1 To 20
            Me.lbox_find.AddItem Sheets("Daten").Cells(i, 1).Value
        Next i
    End Sub
  3. Ereignis beim Klicken: Erstelle eine Schaltfläche, um die markierten Elemente zu verarbeiten. Verwende den folgenden Code, um die Werte aus der ListBox zu extrahieren:

    Private Sub btnÜbernehmen_Click()
        Dim selectedIndex As Integer
        selectedIndex = Me.lbox_find.ListIndex
    
        If selectedIndex = -1 Then
            MsgBox "Bitte wählen Sie einen Datensatz", vbExclamation
            Exit Sub
        End If
    
        ' Werte aus der ListBox in Textfelder übertragen
        uf_haupt("com_buchungsart").Value = Me.lbox_find.List(selectedIndex, 0)
        ' Weitere Übertragungen hier...
    End Sub
  4. Fokus setzen: Um sicherzustellen, dass der Eintrag richtig verarbeitet wird, setze den Fokus auf die ListBox, bevor du die Werte übernimmst:

    Me.lbox_find.SetFocus

Häufige Fehler und Lösungen

  • Fehler: "Eigenschaft List konnte nicht abgerufen werden": Dieser Fehler tritt auf, wenn der Eintrag nicht mehr aktiv ist. Um dies zu vermeiden, stelle sicher, dass du den Fokus auf die ListBox setzt, bevor du die Werte abfragst.

  • Problem mit der blauen Markierung: Wenn die Einträge blau markiert, aber nicht aktiv sind, überprüfe die "MultiSelect"-Einstellung der ListBox und stelle sicher, dass die Eigenschaft "ListStyle" korrekt eingestellt ist. Bei aktivierten Bullets oder Checkboxen wird die Auswahl visuell besser dargestellt.


Alternative Methoden

  • Verwendung von ActiveX-Controls: Du kannst auch ActiveX-Controls verwenden, um eine bessere Kontrolle über die Auswahl und Darstellung der ListBox zu erhalten. Diese bieten zusätzliche Eigenschaften und Ereignisse, die sich gut für komplexe Anwendungen eignen.

  • Datenübertragung ohne ListBox: Wenn es dir schwerfällt, mit der ListBox zu arbeiten, kannst du überlegen, eine ComboBox zu verwenden. Diese bietet eine ähnliche Funktionalität, hat jedoch weniger Komplexität bei der Auswahl.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du die Werte aus einer ListBox in verschiedene Textfelder übertragen kannst:

Private Sub btnÜbernehmen_Click()
    Dim opt_nr As Integer
    Dim i As Integer
    For i = 1 To 20
        If Me("opt" & i).Value = True Then
            opt_nr = i
            Exit For
        End If
    Next i

    If opt_nr = 0 Then
        MsgBox "Bitte wählen Sie einen Datensatz", vbExclamation
        Exit Sub
    End If

    ' Werte in die entsprechenden Textfelder übertragen
    uf_haupt("txt_kommentar").Value = Me.lbox_find.List(Me.lbox_find.ListIndex, 4)
    ' Weitere Übertragungen hier...
End Sub

Tipps für Profis

  • Verwendung von Schleifen: Wenn du mit vielen Einträgen arbeitest, kann es hilfreich sein, Schleifen zu verwenden, um die Effizienz deines Codes zu steigern.

  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen in deinem Code, um unerwartete Fehler zu vermeiden und die Benutzererfahrung zu verbessern.

  • Benutzerfreundlichkeit: Überlege, visuelle Hinweise wie Tooltips oder Statusanzeigen zu integrieren, damit die Benutzer wissen, was sie tun müssen, insbesondere wenn sie mit markierten Einträgen in der ListBox arbeiten.


FAQ: Häufige Fragen

1. Wie kann ich sicherstellen, dass ein Eintrag in der ListBox immer ausgewählt bleibt?
Setze den Fokus auf die ListBox, bevor du den Wert abfragst. Das kannst du mit Me.lbox_find.SetFocus erreichen.

2. Was ist der Unterschied zwischen den verschiedenen MultiSelect-Optionen?

  • fmMultiSelectSingle: Nur ein Eintrag kann ausgewählt werden.
  • fmMultiSelectMulti: Mehrere Einträge können ausgewählt werden, der letzte Eintrag hat einen blauen Rahmen.
  • fmMultiSelectExtended: Erlaubt die Auswahl mehrerer Einträge mit der Shift- oder Strg-Taste.

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