Dieses Forum nutzt Cookies
Dieses Forum verwendet Cookies, um deine Login-Informationen zu speichern, wenn du registriert bist, und deinen letzten Besuch, wenn du es nicht bist. Cookies sind kleine Textdokumente, die auf deinem Computer gespeichert werden. Die von diesem Forum gesetzten Cookies werden nur auf dieser Website verwendet und stellen kein Sicherheitsrisiko dar. Cookies aus diesem Forum speichern auch die spezifischen Themen, die du gelesen hast und wann du zum letzten Mal gelesen hast. Bitte bestätige, ob du diese Cookies akzeptierst oder ablehnst.

Ein Cookie wird in deinem Browser unabhängig von der Wahl gespeichert, um zu verhindern, dass dir diese Frage erneut gestellt wird. Du kannst deine Cookie-Einstellungen jederzeit über den Link in der Fußzeile ändern.

Excel VBA: ListIndex -1 bei mehrspaltiger ComboBox
#1
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
Antworten Top
#2
Wink 
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
Gruß der AlteDresdner (Win11, Off2021)
[-] Folgende(r) 1 Nutzer sagt Danke an AlterDresdner für diesen Beitrag:
  • ricci
Antworten Top
#3
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
Antworten Top
#4
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#5
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.
Antworten Top
#6
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


Angehängte Dateien
.xlsm   Combobox Ausgabe der 2. Spalte.xlsm (Größe: 20,26 KB / Downloads: 1)
[-] Folgende(r) 1 Nutzer sagt Danke an Egon12 für diesen Beitrag:
  • ricci
Antworten Top
#7
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
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
[-] Folgende(r) 1 Nutzer sagt Danke an snb für diesen Beitrag:
  • ricci
Antworten Top
#8
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.


Angehängte Dateien Thumbnail(s)
   
Antworten Top
#9
Schade dass du zu faul bist eine eigene Beispieldatei zu erstellen.


Angehängte Dateien
.xlsb   __schade.xlsb (Größe: 17,91 KB / Downloads: 3)
Zum übersetzen von Excel Formeln:

http://dolf.trieschnigg.nl/excel/index.p...gids=en+de
Antworten Top
#10
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.

.xlsm   Combobox Ausgabe der 2. Spalte.xlsm (Größe: 22,19 KB / Downloads: 1)

Gruß Uwe
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste