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

Forumthread: Combobox Listindex

Combobox Listindex
03.12.2008 10:07:00
walter
Guten Morgen,
ich lese über eine Combox die Auswahldaten aus der Spalte "D1:D" ein.
Nun möchte ich gern, wenn ich z.b. Listindex 4 ausgewählt habe, das aus der Zelle "A2"
der Wert z.b. 22 in die Spalte "E1:E" neben dem Listindexwert gesetzt wird also
die 22 in E4.
Zusatzfrage:
Wie kann man beim aufklappen der Combobox das sofort nach oben gescrollt wird ?
mfg walter mb
Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Combobox Listindex
03.12.2008 18:22:13
fcs
Hallo Walter,
wenn du eine Combobox aus der Steuerelemente-Toolbox verwendest, dann mit folgendem Ereignis-Makro, dass du im VBA-Editor unter dem Tabellenblatt einfügen muss.
Auswertung andere Ereignis (Change oder Click) führt leicht zu ungewollten Einträgen.
Gruß
Franz

Private Sub ComboBox1_LostFocus()
If Me.ComboBox1.ListIndex  -1 Then
Cells(Me.ComboBox1.ListIndex + 1, 5) = Range("A2").Value
End If
End Sub


Anzeige
AW: Combobox Listindex
03.12.2008 19:12:00
walter
Guten Abend Franz,
bin gerade im Süden, habe dennoch testen können, einwandfrei!
Habe es am Schluss vom Change Ereignis gesetzt keine Fehler.
Da ich viele Namen zum Aufklappen habe und wenn ich jetzt Zimmer aufrufe,
und ich suche wieder neu, dann kommer wieder der Name Zimmer.
Kann man beim aufklappen nicht den auf den Namen A stellen bzw. ganz nach oben beim auswählen ?
Bin noch etwas Online, muß dann leider aufhören, Tagung.
mfg Walter mb
Anzeige
AW: Combobox Listindex
04.12.2008 09:19:00
fcs
Hallo Walter,
habe noch ein wenig experimentiert.
Die Kombination der folgenden beiden Ereignismakros sollte deinen Wünschen nahekommen.
Meine Empfehlung LostFocus- statt Change-Ereignis zu benutzen war deshalb, weil es so nicht zu Fehlern bei versehentlichem Anklicken eines falschen Eintrags in der Auswahlliste kommt.
Gruß
Franz

Private Sub ComboBox1_Change()
If Me.ComboBox1.ListIndex  -1 Then
Cells(Me.ComboBox1.ListIndex + 1, 5) = Range("A2").Value
End If
End Sub
Private Sub ComboBox1_GotFocus()
Dim varMerken
'Merken des Eintrags für 1. Eintrag in Spalte E
varMerken = Cells(1, 5)
Me.ComboBox1.ListIndex = 0 'Listbox auf 1. Wert setzen, scrollt auch Anzeige
Me.ComboBox1.ListIndex = -1 'Listbox auf keinn Wert setzen
'gemerkten Eintrag für 1. Zeile in Spalte E wieder eintragen
Cells(1, 5) = varMerken
End Sub


Anzeige
Bin wieder da, Combobox Listindex
05.12.2008 09:09:54
walter
Guten Morgen Franz,
habe mal das 2.Makro getestet, leider Fehlanzeige.
Beim anklicken geht auf den 1. Eintrag aber ich kann dann nicht auswählen.
mfg Walter MB
AW: Bin wieder da, Combobox Listindex
05.12.2008 13:40:00
fcs
Hallo Walter,
du brauchst schon beide Makros, damit es funktioniert.
Beispiel-datei:
https://www.herber.de/bbs/user/57369.xls
Gruß
Franz
Anzeige
Leider irgendwie mein Muster
05.12.2008 17:24:09
walter
Guten Abend Franz,
erst mal Danke.
Soweit alles verstanden, allerdings auf meine Tabelle hin ist irgendwie der Wurm
drin, da ich ja Filter setze.
Anbei deine Datei mit mein Muster, vielleicht hast Du eine Idee ?
https://www.herber.de/bbs/user/57381.xls
mfg walter mb
Anzeige
AW: Leider irgendwie mein Muster
05.12.2008 19:19:55
fcs
Halllo Walter,
durch den Autofilter und das Ändern der Komboboxwerte kam es beim Fokusieren zu mehreren Auslösungen des Change-Ereignis.
Da du Select-Anweisungen für Zellen in deinem Code hattest, verlor die Kombobox ihren Focus und das wàr's.
Ich hab es mal angepasst. Durch eine speziell gesetzte Variable wird verhindert, dass die Change-Prozedur während der Abarbeitung der Focus-Prozedur abgearbeitet wird. Das Setzen der Auswahlliste für die Kombobox muss in die Focus-Prozedur, sonst gibt es ein Problem beim 1. Aufruf der Fosus-Prozedur, da die Kombobox noch gar keine Daten hat.
Der Autofilter wird ggf. ebenfalls in der Focus-prozedur aktiviert.
Gruß
Franz

Option Explicit
Private bolFocus As Boolean
Private Sub ComboBox1_Change()
Dim FI$
If bolFocus = True Then Exit Sub
FI = Me.ComboBox1.Text
If FI = "ALLE" Then
Me.AutoFilter.Range.AutoFilter Field:=3
Else
Me.AutoFilter.Range.AutoFilter Field:=3, Criteria1:=FI & "*"
End If
'-- jetzt wird die Filterungszahl neben Namen gesetzt --------
If Me.ComboBox1.ListIndex  -1 Then
Cells(Me.ComboBox1.ListIndex + 1, 16) = Range("A4").Value
End If
End Sub
Private Sub ComboBox1_GotFocus()
Dim varMerken
On Error Resume Next
bolFocus = True
'Merken des Eintrags für 1. Eintrag in Spalte O
If Not ActiveSheet.AutoFilterMode Then
Range(Cells(5, 1), Cells(Cells.SpecialCells(xlCellTypeLastCell).Row, 13)).AutoFilter
Else
Me.ShowAllData
End If
varMerken = Cells(1, 15)
Me.ComboBox1.List = Me.Range("O1:O" & Me.Cells(Me.Rows.Count, 15).End(xlUp).Row).Value
Me.ComboBox1.ListIndex = 0 'Listbox auf 1. Wert setzen, scrollt auch Anzeige
Me.ComboBox1.ListIndex = -1 'Listbox auf keinn Wert setzen
'gemerkten Eintrag für 1. Zeile in Spalte E wieder eintragen
Cells(0 + 1, 15) = varMerken
bolFocus = False
End Sub


Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Excel VBA: Umgang mit der Combobox Listindex


Schritt-für-Schritt-Anleitung

  1. Füge eine Combobox in dein Excel-Dokument ein.

    • Gehe zu "Entwicklertools" und wähle "Einfügen". Wähle dann die Combobox aus der Steuerelemente-Toolbox.
  2. Öffne den VBA-Editor.

    • Drücke ALT + F11, um den VBA-Editor zu öffnen.
  3. Füge den folgenden Code in das entsprechende Tabellenblatt ein:

    Private Sub ComboBox1_LostFocus()
       If Me.ComboBox1.ListIndex <> -1 Then
           Cells(Me.ComboBox1.ListIndex + 1, 5) = Range("A2").Value
       End If
    End Sub
  4. Um das Scrollen der Combobox zu steuern, füge diesen Code hinzu:

    Private Sub ComboBox1_GotFocus()
       Me.ComboBox1.ListIndex = 0 ' Setzt den Index auf den ersten Wert
    End Sub
  5. Teste die Combobox, um sicherzustellen, dass die Werte korrekt in die Zellen geschrieben werden.


Häufige Fehler und Lösungen

  • Fehler: Der ListIndex bleibt auf -1.

    • Lösung: Stelle sicher, dass die Combobox korrekt mit Werten gefüllt ist. Überprüfe, ob der Bereich, aus dem die Werte stammen, richtig definiert ist.
  • Fehler: Der Wert wird nicht in die richtige Zelle geschrieben.

    • Lösung: Achte darauf, dass der Index um 1 erhöht wird, da Excel-Tabellen bei 1 beginnen, aber die ListIndex-Eigenschaft bei 0.

Alternative Methoden

Eine alternative Methode, um die Combobox zu steuern, ist die Verwendung des Change-Ereignisses anstelle des LostFocus-Ereignisses. Hier ein Beispiel:

Private Sub ComboBox1_Change()
    If Me.ComboBox1.ListIndex <> -1 Then
        Cells(Me.ComboBox1.ListIndex + 1, 5) = Range("A2").Value
    End If
End Sub

Das Change-Ereignis wird ausgelöst, wenn der Benutzer einen neuen Eintrag auswählt, was eine direkte Aktualisierung ermöglicht.


Praktische Beispiele

  • Beispiel 1: Werte aus einer Liste in Spalte D einfügen.

    • Du kannst die Combobox so einstellen, dass sie Werte aus einem bestimmten Bereich wie D1:D bezieht. Stelle sicher, dass du den Bereich in der List-Eigenschaft der Combobox richtig angibst.
  • Beispiel 2: Kombinierte Verwendung von Autofilter und Combobox.

    • Wenn du mit dem Autofilter arbeitest, kannst du den Filterwert direkt aus der Combobox beziehen, um die angezeigten Daten dynamisch zu ändern.

Tipps für Profis

  • Verwende .ListCount, um die Anzahl der Elemente in der Combobox zu überprüfen.

    • Dies kann nützlich sein, um sicherzustellen, dass die Combobox tatsächlich Werte enthält.
  • Nutze .ListIndex für eine einfache Navigation.

    • Du kannst die ListIndex-Eigenschaft verwenden, um schnell auf das aktuell ausgewählte Element zuzugreifen.
  • Achte auf die Performance.

    • Bei großen Datenmengen kann es sinnvoll sein, die Combobox nur bei Bedarf zu aktualisieren, um die Performance zu verbessern.

FAQ: Häufige Fragen

1. Wie kann ich die Combobox mit VBA füllen? Du kannst die Combobox mit dem folgenden Code füllen:

Me.ComboBox1.List = Range("D1:D10").Value

2. Was bedeutet der ListIndex in einer Combobox? Der ListIndex gibt den Index des aktuell ausgewählten Elements in der Combobox an. Ein Wert von -1 bedeutet, dass kein Element ausgewählt ist.

3. Wie kann ich mehrere Comboboxen in einem Formular verwenden? Jede Combobox sollte ihren eigenen Codeblock haben, um spezifische Funktionen zu erfüllen. Verwende die gleiche Struktur wie oben beschrieben, um die Logik anzupassen.

4. Ist es möglich, die ListIndex-Eigenschaft in VBA zu setzen? Ja, du kannst die ListIndex-Eigenschaft verwenden, um das aktuell ausgewählte Element programmgesteuert zu ändern.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige