Clever-Excel-Forum

Normale Version: Excel VBA: ListIndex -1 bei mehrspaltiger ComboBox
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo zusammen,

kann mir jemand bitte erklären, warum beim SpinButton Event der ListIndex meiner ComboBox immer -1 ist. Wenn ich jedoch, über die ComboBox direkt ein anderen ListIndex auswähle, der mir über das Event ComboBox_Change die richtige ListIndex ausgibt?

Es geht darum, dass ich über ein ActiveX SpinButton ganz bequem durch meine ComboBox scrollen möchte. Dies hat bisher auch wunderbar geklappt, bis ich auf eine zweispaltige ComboBox geändert habe, um für weitere Funktionen grundlegend den Code zu optimieren.

Code:
Private Sub ComboBox2_Change()
    Dim selectedRow As Long
   
    ' Überprüfen, ob ein Element ausgewählt wurde
    If ComboBox2.ListIndex >= 0 Then
        ' Index der ausgewählten Zeile speichern
        selectedRow = ComboBox2.ListIndex
       
        ' Firma und Kunden-ID aus den ausgewählten Zeilen abrufen
        Dim firma As String
        Dim kundenID As String
       
        firma = ComboBox2.List(selectedRow, 1) ' 1 ist die Indexnummer der Firma-Spalte
        kundenID = ComboBox2.List(selectedRow, 0) ' 0 ist die Indexnummer der Kunden-ID-Spalte
       
        ' Wert in der ComboBox aktualisieren
        ComboBox2.Value = "[" & kundenID & "] " & firma
       
        Range("C6").Value = kundenID
        Range("C7").Value = firma
       
        Label2.Caption = selectedRow + 1 & " / " & ComboBox2.ListCount
       
    End If
End Sub

Private Sub SpinButton1_SpinDown()

    Dim currentIndex As Long
    currentIndex = ComboBox2.ListIndex
   
    If currentIndex > 0 Then
        ComboBox2.ListIndex = currentIndex - 1
    End If

End Sub

Private Sub SpinButton1_SpinUp()

    Dim currentIndex As Long
    currentIndex = ComboBox2.ListIndex
   
    If currentIndex < ComboBox2.ListCount - 1 Then
        ComboBox2.ListIndex = currentIndex + 1
    End If

End Sub


ERGÄNZUNG:

Es liegt an folgender Zeile: 
Code:
ComboBox2.Value = "[" & kundenID & "] " & firma

Hat jemand eine Idee, wie ich es so drehe, dass der SpinButton mit dem ListIndex arbeiten kann. Auch wenn ich den ComboBox.Value vorher im ComboBox_Change Event übersichtlicherweise geändert habe?


Gruß

Ricci
Hallo Ricci,
vermutlich liegt es wirklich an der Zeile, da du damit in die Combobox etwas einträgst, das in der Liste der Box nicht vorhanden ist. Folglich wird ListIndex zu -1.
Entweder du lässt diese Zeile weg (CmboBox2.Value="[...) oder steckst den Wert in eine Textbox oder aktualisierst über Combox2.List(selectedrow,1)="[....
Das ist aber eigentlich sinnlos, da ja in beiden Spalten die Infos stehen. Also: Zeile weglassen, und alles geht
Hallo AlterDesdner,

vielen Dank für deine Antwort.

Leider bringt mir die Kunden-ID als ComboBox.Value relativ wenig. Ich muss schon zumindest die Firma ablesen können.

Blöderweise ist es so nicht mit dem SpinButton kompatibel. Ich könnte natürlich, wie du es vorgeschlagen hast, über ein ActiveX-Label mir die Firma + Kunden-ID anzeigen lassen.
Nur finde ich diesen Lösungsvorschlag nicht unbedingt schön, da ich zusätzlich das Label unterbringen muss.

Ich hoffe, mir kann sonst noch jemand einen "eleganteren" Lösungsvorschlag unterbreiten.

Gruß

Ricci
eine Beispieldatei wäre hlifreich....
verzichte auf redundante Variablen
Dieser Code reicht:
Code:
Private Sub ComboBox2_Change()
  If ComboBox2.ListIndex >-1 Then cells(6,3).resize(2)=application.transpose(array(combobox2.value,combobox2.column(1)))
End Sub

'Man sollte die Spinbutton min auf 0 setzen

Private Sub SpinButton1_SpinDown()
   ComboBox2.ListIndex = Spinbutton1
End Sub

Private Sub SpinButton1_SpinUp()
   ComboBox2.ListIndex = Spinbutton1
End Sub
Danke für deinen Beitrag.



Zu dem Problem konnte ich bisher noch keine Lösung finden. Ich freue mich sehr, wenn mir jemand einen konstruktiven Lösungsvorschlag nennen kann.

Vielen Dank

Gruß

Ricci.
Hallo Ricci,

mit dieser Zeile
Code:
ComboBox2.Value = "[" & kundenID & "] " & firma
löst du ein weiteres Change Ereignis aus, in dessen Folge dieser Wert nie jemals gefunden werden kann und damit der Listindex immer -1 sein wird.
so wie ich es sehe willst du doch eigentlich an den Firmennamen. Stelle die Combobox unter TextColumn auf 2 und entferne diese Codezeile und Alles ist wie es sein soll.
 

Gruß Uwe
Zitat:Ich freue mich sehr, wenn mir jemand einen konstruktiven Lösungsvorschlag nennen kann.

Hast du schon bekommen.
Bitte, lese und teste.
https://www.clever-excel-forum.de/Thread...#pid278137
Vielen Dank noch mal für den Hinweis.

Ich habe deinen Code getestet, dieser erfüllt leider nicht der Anforderung. Zu mal ich mir nicht mal sicher bin, ob meine Vorstellung so überhaupt umsetzbar ist.

Gerne möchte ich diese Anzeige als ComboBox.Value anzeigen und nicht separat über eine andere Zelle / ActiveX-Steuerelement wie z.B. ein Label. Ändert man jedoch den ComboBox.Value, löst man damit Probleme beim ListIndex aus.


Also noch mal die Frage: Ist es möglich, die Firma und Kunden-ID direkt als ComboBox.Value anzeigen zu lassen und gleichzeitig die Funktion des SpinButtons nutzen zu können? Statt der 46 soll z.B. "[23] Firma XY" stehen (siehe Anhang).


Ich korrigiere:

Vielen Dank an Uwe bzw. Egon12 für den Hinweis des TextColumns! So simpel... Mit dieser Ausgabe kann ich definitiv leben.
Schade dass du zu faul bist eine eigene Beispieldatei zu erstellen.
Anbei noch mal deine ursprüngliche Bitte/Vorstellung nur ohne die Rückgabe ins Value. Da hilft der Weg über die Ausgabe einer 3. Spalte in der Combobox.
[attachment=49377]

Gruß Uwe