Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

listbox listindex zurücksetzen

Forumthread: listbox listindex zurücksetzen

listbox listindex zurücksetzen
28.09.2005 21:57:48
Ingo
Guten Abend,
ein kleines Problem bei der Auswahl eines Wertes aus einer ListBox.
An erster Stelle (Index 0 ) stehen die Überschriften.
Die sollen nicht ausgewählt werden können. Wie kann ich im
click-Ereignis die Auswahl so verhindern, dass auch die Markierung
des Wertes wieder verschwindet ? Zurücksetzen auf Index -1 scheint es
offensichtlich nicht zu sein.
Danke für einen Tip
Gruß, Ingo
Anzeige

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: listbox listindex zurücksetzen
28.09.2005 22:13:26
Matthias
Hallo Ingo,
warum schreibst du die Überschrift nicht als Label über die Listbox?
Gruß Matthias
AW: listbox listindex zurücksetzen
28.09.2005 22:32:33
Ingo
Hallo Matthias,
weil ich bei der Größe des Projektes auf jedes überflüssige Objekt,
bzw. jede vermeidbare Codezeile verzichten möchte.
(Und weil ich jetzt neugierig bin und wissen will, wie es geht ;-))
Gruß, Ingo
Anzeige
AW: listbox listindex zurücksetzen
28.09.2005 22:44:45
Matthias
Hallo Ingo,
weil ich bei der Größe des Projektes auf jedes überflüssige Objekt,
bzw. jede vermeidbare Codezeile verzichten möchte.

Das gilt nicht, dafür brauchst du sicher mehr Code als mit dem Label ;-)
(Und weil ich jetzt neugierig bin und wissen will, wie es geht ;-))
Das gilt schon eher ;-)
Aber ich merke grade, ich krieg es auch nicht hin. :-(
Mein Versuch:

Option Explicit
Dim merker
Private Sub ListBox1_Click()
Label1.Caption = merker
If ListBox1.ListIndex = 0 Then
'MsgBox "hey!"
ListBox1.Value = merker
DoEvents
'ListBox1.ListIndex = -1
Else
merker = ListBox1.Value
End If
End Sub
Private Sub UserForm_Initialize()
Label1.Caption = ""
With ListBox1
.AddItem "Name"
.AddItem "Sepp"
.AddItem "Hans"
.AddItem "Fritz"
.ListIndex = 1
End With
End Sub

Muss ich leider passen!
Gruß Matthias
Anzeige
AW: listbox listindex zurücksetzen
28.09.2005 22:59:16
Peter
Servus,
hmm ist sicher keine optimale Lösung, vieleicht reichts sogar.
Zumindest wird die Überschrift nicht markiert.
Code sparst du dir mit meinem Bsp. mit Sicherheit nicht, eher im Gegenteil ;-)
Private Sub ListBox1_Click()
With Me.ListBox1
If .ListIndex = -1 Then Exit Sub
If .ListIndex = 0 Then
.Clear
.AddItem ("Überschrift")
.AddItem ("Hund")
.AddItem ("Katze")
.AddItem ("Maus")
End If
End With
End Sub
Private Sub UserForm_Initialize()
With Me.ListBox1
.AddItem ("Überschrift")
.AddItem ("Hund")
.AddItem ("Katze")
.AddItem ("Maus")
End With
End Sub

MfG
Peter
Anzeige
AW: listbox listindex zurücksetzen
28.09.2005 23:36:39
Ingo
Oha, da rauschen meine array aber nur so durch die Drähte ;-)
Naja, jetzt sind wir ja schon zu dritt an "der Sache 'dran".
Du wirst mir verzeihen, wenn ich Deine Lösung erst mal nur zur Kenntnis nehme
aber noch nicht verwende ;-)
Noch gebe ich die Hoffnung auf eine "schau-mal-wie-einfach" Lösung nicht auf.
Gruß, Ingo
Anzeige
AW: listbox listindex - "schau-mal-wie-einfach"
28.09.2005 23:38:30
Matthias
Hallo ingo,
ich habs!

Option Explicit
Dim merker
Private Sub ListBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
With ListBox1
If .ListIndex = 0 Then
Cancel = True
.ListIndex = merker
Else
merker = .ListIndex
End If
End With
End Sub
Private Sub UserForm_Initialize()
Label1.Caption = ""
With ListBox1
.AddItem "Name"
.AddItem "Sepp"
.AddItem "Hans"
.AddItem "Fritz"
.ListIndex = 1
End With
End Sub

Grüße,
Matthias
Anzeige
AW: listbox listindex - "schau-mal-wie-einfach"
28.09.2005 23:50:23
K.Rola
Hallo,
was hat das Label für eine Funktion?
Gruß K.Rola
AW: listbox listindex - "schau-mal-wie-einfach"
28.09.2005 23:58:30
Matthias
Hallo K.Rola,
was hat das Label für eine Funktion?
Keine mehr, das war zum rumprobieren, hab ich vergessen zu löschen ;-)
Gruß Matthias
AW: listbox listindex - "schau-mal-wie-einfach"
29.09.2005 00:09:46
Matthias
Hallo K.Rola,
ursprünglich war das Label dazu gedacht, deinen Vornamen im Klartext anzuzeigen ;-)
Gruß Matthias
Anzeige
"schau-mal-wie-einfach"..grübel ;-))
28.09.2005 23:54:03
Ingo
Hi Matthias,
genial daneben ;-) ich wollte ja nicht das Schliessen der UF verhindern sondern
die Markierung von Index 0 in der TextBox nicht zulassen.
Aber Deinen Vorschlag werde ich unter "kann man gut verwenden" ablegen ;-)
Danke und Gruß, Ingo
AW: "schau-mal-wie-einfach"..grübel ;-))
28.09.2005 23:57:30
Matthias
Hallo Ingo,
na, na, mit Cancel = True kann man in diesem Zusammenhang nicht das Schließen der UF verhindern!
Nur im Userform_QueryClose()-Ereignis!
Warum das hier einen Effekt hat, weiß ich auch nicht.
Gruß Matthias
Anzeige
jetzt war ich verwirrt,...
29.09.2005 00:08:01
Matthias
Hallo Ingo,
...denn ich dachte, deine Antwort bezog sich auf meinen Beitrag, den ich versehentlich hier eingestellt habe:
https://www.herber.de/forum/messages/674142.html
(Ersetze hier "Hans" durch "Ingo")
Es ist spät geworden... 8-)
Gruß Matthias
Anzeige
bin immer noch verwirrt!
29.09.2005 00:13:30
Matthias
Hallo Ingo,
genial daneben ;-) ich wollte ja nicht das Schliessen der UF verhindern sondern
die Markierung von Index 0 in der TextBox nicht zulassen.

funktioniert meine Lösung bei Dir denn nicht?
Gruß Matthias
AW: bin immer noch verwirrt!
29.09.2005 00:24:54
Ingo
Hi Matthias,
also wenn Deine Lösung das Markieren des Eintrages nicht zulassen sollte,
dann funktioniert es bei mir tatsächlich nicht.
Insofern bin ich mit dem Vorschlag von K.Rola recht zufrieden.
War doch alles in allem ein nettes Gewusel wegen dieser kleinen Frage ;-)
Morgen denke ich mir eine andere aus...lach
So, ich muß jetzt in die Koje, der Wecker klingelt bald.
Gute Nacht
Ingo
Anzeige
AW: bin immer noch verwirrt!
29.09.2005 00:26:01
Matthias
Hallo Ingo,
meine Lösung funnktioniert aber.
Gute Nacht
Matthias
AW: listbox listindex zurücksetzen
28.09.2005 23:46:13
K.Rola
Hallo,
ist zwar offenbar heute nicht mein Tag, aber dennoch:

Private Sub ListBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
If Button = 1 And ListBox1.ListIndex = 0 Then ListBox1.ListIndex = -1
End Sub

Gruß K.Rola
Anzeige
AW: aber dennoch..
29.09.2005 00:00:52
Ingo
Hmm...wenn das heute nicht Dein Tag ist
und Du die Lösung dennoch beiläufig parat hast,
möchte ich an Deinen guten Tagen
gern' ein richtiges Problem haben ;-)
Danke und Gruß
Ingo
AW: aber dennoch..
29.09.2005 00:03:47
Matthias
Hallo Ingo,
naja, man kann den ersten Eintrag noch mit den Cursortasten markieren.
Gruß Matthias
Anzeige
AW: aber dennoch..
29.09.2005 00:11:49
K.Rola
Hallo,
sag ja, nicht mein Tag, deine Variante ist besser.
Gruß K.Rola
;
Anzeige
Anzeige

Infobox / Tutorial

Listbox ListIndex in Excel VBA zurücksetzen


Schritt-für-Schritt-Anleitung

Um den ListIndex einer ListBox in Excel VBA zurückzusetzen, kannst du den folgenden Code in das Click-Ereignis der ListBox einfügen. Dieser Code verhindert, dass der erste Eintrag (z.B. eine Überschrift) ausgewählt wird:

Private Sub ListBox1_Click()
    If ListBox1.ListIndex = 0 Then
        ListBox1.ListIndex = -1
    End If
End Sub

Zusätzlich kannst du den ListBox beim Initialisieren mit Werten befüllen:

Private Sub UserForm_Initialize()
    With ListBox1
        .AddItem "Überschrift"
        .AddItem "Eintrag 1"
        .AddItem "Eintrag 2"
    End With
End Sub

Häufige Fehler und Lösungen

  1. Fehler: Der ListIndex wird nicht zurückgesetzt.

    • Stelle sicher, dass der Code im richtigen Ereignis (z.B. Click oder MouseUp) eingebettet ist. Verwende ListBox1.ListIndex anstelle von ListBox1.Value.
  2. Fehler: Die ListBox zeigt immer noch die Überschrift an.

    • Überprüfe, ob du das richtige If-Statement verwendest. Es sollte If ListBox1.ListIndex = 0 Then sein, um die Überschrift zu überprüfen.

Alternative Methoden

Eine alternative Methode, um die Auswahl der Überschrift zu verhindern, ist die Verwendung des BeforeUpdate-Ereignisses:

Private Sub ListBox1_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
    If ListBox1.ListIndex = 0 Then
        Cancel = True
        ListBox1.ListIndex = -1
    End If
End Sub

Diese Methode sorgt dafür, dass die Auswahl nicht aktualisiert wird, wenn die Überschrift ausgewählt ist.


Praktische Beispiele

Hier ist ein einfaches Beispiel, das zeigt, wie du eine ListBox mit Excel VBA erstellen und den ListIndex zurücksetzen kannst:

Private Sub UserForm_Initialize()
    With ListBox1
        .AddItem "Überschrift"
        .AddItem "Hund"
        .AddItem "Katze"
        .AddItem "Maus"
    End With
End Sub

Private Sub ListBox1_Click()
    If ListBox1.ListIndex = 0 Then
        ListBox1.ListIndex = -1
    End If
End Sub

In diesem Beispiel wird die ListBox initialisiert und die Auswahl der Überschrift wird ausgeschlossen.


Tipps für Profis

  • Verwende Labels: Überlege, Labels über der ListBox zu verwenden, um die Benutzeroberfläche zu verbessern, anstatt die erste Zeile als Überschrift zu verwenden.
  • Event-Management: Nutze verschiedene Event-Handler wie MouseUp oder BeforeUpdate, um die Benutzerinteraktion besser zu steuern.
  • Modularer Code: Halte deinen Code modular und vermeide redundante Zeilen, um die Wartbarkeit zu erhöhen.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen ListIndex und Value? Der ListIndex gibt die Position des aktuell ausgewählten Elements in der ListBox an, während Value den tatsächlichen Inhalt des ausgewählten Elements zurückgibt.

2. Wie setze ich den ListIndex auf einen bestimmten Wert? Du kannst den ListIndex einfach mit ListBox1.ListIndex = x setzen, wobei x der Index des gewünschten Elements ist.

3. Kann ich mehrere Elemente in einer ListBox auswählen? Ja, wenn du die MultiSelect-Eigenschaft der ListBox auf fmMultiSelectMulti setzt, kannst du mehrere Elemente auswählen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige