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

VBA UF: Values einer ListBox ansprechen

Forumthread: VBA UF: Values einer ListBox ansprechen

VBA UF: Values einer ListBox ansprechen
Holger,
Hallo,
ich habe mal wieder eine Idee für bessere Usability.
Idee 1:
Und zwar habe ich ein UF mit einer ListBox darauf.
Hier kann man nun eine oder mehrere Values auswählen.
Ich will nun unten eine TextBox einbauen, die immer anzeigt wieviele values man
gerade ausgewählt hat.
Dafür bräuchte ich aber ein Ereignis, welches in Kraft tritt wenn, wenn values
aktiviert bzw ausgewählt wird. Change Ereignis geht ja nicht weil hier
kann ich ja die anderen aktivierten Values nicht zählen.
Wie also sonst?
Idee2
Ebenso UF mit ListBox, hier allerdings per Option d.h. es kann immer nur einer
ausgewählt werden. Man kann durch die Liste scrollen und ich möchte den gerade
aktiven in fetter Schrift hervorheben.
Kein Schimmer wie, ist das möglich?
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA UF: Values einer ListBox ansprechen
19.01.2011 11:39:17
hary
Hallo Holger
Test fuer Idee1

Private Sub ListBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As  _
Single, ByVal Y As Single)
Dim a As Long
a = a + 1
TextBox1 = a
End Sub

gruss hary
AW: VBA UF: Values einer ListBox ansprechen
19.01.2011 13:05:44
Holger,
Hallo Hary,
das geht leider nicht, da hier nur von oben nach unten gezählt wird.
Wenn aber ein Eintrag wieder entfernt wird, wird a nicht aktualisiert.
MouseUp geht wiederum nicht, weil hier der Stand von a nicht bekannt ist.
Verzwickt.
Anzeige
ListBox-Multiselected zählen
19.01.2011 13:13:15
Erich
Hallo Holger,
hier eine Alternative.
Die Routine mit XXX... ist nur zum Spielen...

Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, _
ByVal Y As Single)
Dim ii As Long, lngA As Long
lngA = 0
With ListBox1
For ii = 0 To .ListCount - 1
lngA = lngA - ListBox1.Selected(ii)
Next ii
End With
TextBox1 = lngA
End Sub
Private Sub XXX_ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As  _
Single, ByVal Y As Single)
Dim ii As Long, lngA As Long
lngA = 0
With ListBox1
For ii = 0 To .ListCount - 1
If ListBox1.Selected(ii) Then
Cells(ii + 1, 1) = .List(ii)
lngA = lngA + 1
Else
Cells(ii + 1, 1).ClearContents
End If
Next ii
End With
TextBox1.Text = lngA
End Sub
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
MouseUp
19.01.2011 14:22:06
Holger,
Hallo Erich,
was genau ist MouseUp für ein Ereignis?
Ich verstehe das nicht so ganz ...
Gruß+Dank
Holger
AW: MouseUp
19.01.2011 16:19:10
Erich
Hi Holger,
zunächst mal: Funktioniert es denn bei dir mit dem MouseUp?
Ich habe mal drei Fundstellen hier gegoogelt:
https://www.herber.de/forum/archiv/956to960/t958587.htm#958667
https://www.herber.de/forum/archiv/1192to1196/t1193102.htm#1193363
https://www.herber.de/forum/archiv/664to668/t665370.htm#665436
Kurz gesagt: Das MouseUp-Ereginis eines Kontrollelements (z. B. Button oder Listbox) wird ausgelöst dadurch,
dass man eine Maustaste über dem Kontrollelement loslässt, die Taste also wieder hochgeht.
Mit dem (vorherigen) MouseDown wird z. B. das Selektieren (Markieren) angestoßen,
beim MouseUp ist es dann erledigt.
Hast du dir in dder VBA-Hilfe mal den Abschnitt "MouseDown-, MouseUp-Ereignisse" angesehen?
(Findest du leicht, wenn du nach mouseup suchst)
Da steht z. B.:
"Treten ein, wenn der Benutzer mit einer Maustaste klickt. MouseDown tritt ein, wenn der Benutzer die Maustaste drückt, MouseUp tritt ein, wenn der Benutzer die Maustaste loslässt."
Reicht das als Erklärung?
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Werte einer ListBox in Excel VBA ansprechen


Schritt-für-Schritt-Anleitung

Um die Werte einer ListBox in einem UserForm mit Excel VBA anzusprechen, kannst Du folgende Schritte befolgen:

  1. UserForm erstellen:

    • Öffne den VBA-Editor (Alt + F11).
    • Füge ein neues UserForm hinzu (Einfügen > UserForm).
  2. ListBox und TextBox hinzufügen:

    • Ziehe eine ListBox und eine TextBox auf das UserForm.
  3. ListBox füllen:

    • Füge einige Werte zur ListBox hinzu. Das kannst Du im Code-Editor im UserForm machen:
      Private Sub UserForm_Initialize()
      With ListBox1
         .AddItem "Wert 1"
         .AddItem "Wert 2"
         .AddItem "Wert 3"
      End With
      End Sub
  4. Ereignis hinzufügen:

    • Um die Anzahl der ausgewählten Werte anzuzeigen, füge das MouseUp-Ereignis hinzu:
      Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer)
      Dim i As Long, selectedCount As Long
      selectedCount = 0
      For i = 0 To ListBox1.ListCount - 1
         If ListBox1.Selected(i) Then
             selectedCount = selectedCount + 1
         End If
      Next i
      TextBox1.Text = selectedCount
      End Sub
  5. UserForm testen:

    • Starte das UserForm und teste die Auswahl der ListBox-Werte.

Häufige Fehler und Lösungen

  • Fehler: TextBox zeigt immer 0 an:

    • Lösung: Stelle sicher, dass das Ereignis korrekt mit der ListBox verknüpft ist. Überprüfe den Code für das MouseUp-Ereignis.
  • Fehler: Werte werden nicht richtig gezählt:

    • Lösung: Überprüfe den Code im For-Loop. Stelle sicher, dass die Bedingung für ListBox1.Selected(i) korrekt ist.

Alternative Methoden

Eine alternative Methode zur Zählung der ausgewählten Werte ist die Verwendung des Change-Ereignisses. Allerdings ist diese Methode weniger zuverlässig, wenn mehrere Werte ausgewählt werden können. Hier ist ein Beispiel, das die Zählung im Change-Ereignis umsetzt:

Private Sub ListBox1_Change()
    Dim i As Long, selectedCount As Long
    selectedCount = 0
    For i = 0 To ListBox1.ListCount - 1
        If ListBox1.Selected(i) Then
            selectedCount = selectedCount + 1
        End If
    Next i
    TextBox1.Text = selectedCount
End Sub

Praktische Beispiele

Hier sind einige praktische Beispiele, wie Du die ListBox in verschiedenen Szenarien nutzen kannst:

  1. Einzelne Auswahl: Verwende eine OptionButton, um eine Einzel-Auswahl zu ermöglichen und hebe den aktuell ausgewählten Wert hervor.

  2. Mehrfache Auswahl: Zähle die ausgewählten Werte und aktualisiere eine TextBox, um die Benutzerfreundlichkeit zu erhöhen.

  3. Daten in Zellen schreiben: Schreibe die ausgewählten Werte aus der ListBox in eine Tabelle:

    Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer)
       Dim i As Long
       For i = 0 To ListBox1.ListCount - 1
           If ListBox1.Selected(i) Then
               Cells(i + 1, 1).Value = ListBox1.List(i)
           End If
       Next i
    End Sub

Tipps für Profis

  • Nutze die AddItem-Methode, um die ListBox dynamisch zu füllen, z.B. aus einer Datenquelle.
  • Experimentiere mit der ListIndex-Eigenschaft, um den aktuell ausgewählten Index zu ermitteln.
  • Verwende die ListCount-Eigenschaft, um die Anzahl der Einträge in der ListBox zu ermitteln.
  • Achte darauf, dass Du die MultiSelect-Eigenschaft der ListBox auf fmMultiSelectMulti einstellen kannst, um mehrere Auswahlen zu ermöglichen.

FAQ: Häufige Fragen

1. Wie kann ich die ListBox im UserForm anpassen?
Du kannst die Eigenschaften der ListBox im Eigenschaftenfenster im VBA-Editor anpassen, einschließlich Größe, Farbe und Schriftart.

2. Was ist der Unterschied zwischen MouseDown und MouseUp?
MouseDown wird ausgelöst, wenn die Maustaste gedrückt wird, während MouseUp erfolgt, wenn die Maustaste losgelassen wird. Für die Zählung der ListBox-Werte ist MouseUp meist die bessere Wahl.

3. Wie kann ich eine ListBox mit Werten aus einer Excel-Tabelle füllen?
Du kannst die Werte aus einem Bereich in der Excel-Tabelle in die ListBox laden, indem Du eine Schleife verwendest, um die Werte einzufügen:

Dim cell As Range
For Each cell In Range("A1:A10")
    ListBox1.AddItem cell.Value
Next cell

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