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

Forumthread: Combobox.Listindex = 0 ohne change Ereignis

Combobox.Listindex = 0 ohne change Ereignis
18.02.2005 11:58:12
Heiko
Moin moin ans Forum,
stehe mal wieder auf dem Schlauch mit folgendem Problem.
Ich habe eine Combobox in einem Userform. Diese Combobox wird im UserForm_Activate() Ereignis über
ComboBox2.List() = MyArray
' Combobox mit der ersten Zeile vorbelegen.
ComboBox2.ListIndex = 0
befüllt und so vorbelegt das die nullte Zeile angezeigt wird.
Klappt auch alles wunderbar, nur löst die Zeile
ComboBox2.ListIndex = 0
das Combobox2_Change Ereignis aus und ruft mir den darin enthaltenden Code auf.
Wie kann ich das verhindern.
Habe schon
Application.EnableEvents = False
ComboBox2.ListIndex = 0
Application.EnableEvents = True
probiert, brachte aber keinen Erfolg.
Danke schon mal für alle Antworten.
Gruß aus dem Norde, Heiko

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Combobox.Listindex = 0 ohne change Ereignis
K.Rola
Hallo,
so in dieser Art:
Option Explicit
Dim Blocker As Boolean
Private Sub ComboBox1_Change()
If Blocker Then Exit Sub
'mach was!
End Sub
Private Sub UserForm_Activate()
Blocker = True
ComboBox1.ListIndex = 0
Blocker = False
End Sub

Gruß K.Rola
Anzeige
AW: Combobox.Listindex = 0 ohne change Ereignis
Heiko
Hallo K.Rola,
danke für den Tipp, habe ihn etwas für mich angepasst und nun gehts.
Also danke nochmal und ein schönes Wochenende,
Gruß Heiko
AW: Combobox.Listindex = 0 ohne change Ereignis
18.02.2005 12:10:58
Franz
Hallo Heiko,
musste ich schmerzlich auch vor kurzem lernen: EnableEvents geht nur auf Tabellenebene, nicht in einer UF
Aber probier doch mal (ungetestet):
If ComboBox2.ListIndex = 0 then exit sub
Grüße
Franz
Anzeige
AW: Combobox.Listindex = 0 ohne change Ereignis
Heiko
Hallo Franz,
danke für den Tipp, geht so aber leider nicht da mit deiner Zeile das auswerten der Zeile 0 nicht mehr möglich wäre.
Werde den Ansatz von K.Rola nutzen.
Trotzdem Danke und ein schönes Wochenende,
Gruß Heiko
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Combobox.Listindex = 0 ohne Change Ereignis in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine Combobox in einem Userform so zu konfigurieren, dass der ListIndex beim Aktivieren des Userforms auf 0 gesetzt wird, ohne das Change Ereignis auszulösen, folge diesen Schritten:

  1. Öffne den VBA-Editor in Excel (ALT + F11).
  2. Erstelle ein neues Userform oder öffne ein bestehendes.
  3. Füge eine Combobox (z.B. ComboBox1) hinzu.
  4. Füge im Code des Userforms das folgende Snippet ein:
Option Explicit
Dim Blocker As Boolean

Private Sub ComboBox1_Change()
    If Blocker Then Exit Sub
    ' Hier kann dein Code für das Change-Ereignis stehen
End Sub

Private Sub UserForm_Activate()
    Blocker = True
    ComboBox1.ListIndex = 0
    Blocker = False
End Sub
  1. Schließe den VBA-Editor und teste das Userform.

Häufige Fehler und Lösungen

Fehler: Application.EnableEvents = False funktioniert nicht im Userform.

Lösung: Verwende eine Flag-Variable (wie Blocker im obigen Beispiel), um das Change Ereignis zu steuern. So kannst du das Change Ereignis bei der Initialisierung der Combobox unterdrücken.


Alternative Methoden

Eine andere Methode, um den ListIndex zu setzen, ohne das Change Ereignis auszulösen, ist die Verwendung einer If-Bedingung. Du kannst prüfen, ob der ListIndex bereits auf 0 gesetzt ist:

Private Sub ComboBox1_Change()
    If ComboBox1.ListIndex = 0 Then Exit Sub
    ' Dein Code hier
End Sub

Diese Methode ist jedoch nicht so zuverlässig wie die Verwendung einer Flag-Variable.


Praktische Beispiele

Hier ist ein Beispiel, wie du eine Combobox mit Werten füllen und den ListIndex setzen kannst, ohne unerwünschte Ereignisse auszulösen:

Private Sub UserForm_Activate()
    Dim MyArray As Variant
    MyArray = Array("Wert 1", "Wert 2", "Wert 3")
    ComboBox1.List = MyArray
    Blocker = True
    ComboBox1.ListIndex = 0
    Blocker = False
End Sub

In diesem Beispiel wird die Combobox mit einem Array gefüllt und der ListIndex wird direkt nach dem Füllen gesetzt.


Tipps für Profis

  • Verwende die ListCount-Eigenschaft, um sicherzustellen, dass deine Combobox Werte hat, bevor du den ListIndex setzt:
If ComboBox1.ListCount > 0 Then
    ComboBox1.ListIndex = 0
End If
  • Halte den Code sauber und verwende Option Explicit, um sicherzustellen, dass alle Variablen deklariert sind.

FAQ: Häufige Fragen

1. Warum löst das Setzen des ListIndex das Change-Ereignis aus?
Das Setzen des ListIndex löst das Change Ereignis aus, weil Excel denkt, dass sich der Wert der Combobox geändert hat.

2. Welche Excel-Version wird für diese Beispiele benötigt?
Die Beispiele sind für alle modernen Excel-Versionen geeignet, die VBA unterstützen, einschließlich Excel 2010 bis 2021 und Excel 365.

3. Kann ich eine ähnliche Methode für andere Steuerelemente verwenden?
Ja, das Konzept der Verwendung einer Flag-Variable kann auch auf andere Steuerelemente wie Listenfelder angewendet werden.

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