2017-04-07 3 views
0

Haben Sie eine Combobox & Befehlstaste auf Excel-Blatt platziert. In Combobox werden einige Elemente aufgeführt, z. B. 1, 2, 3, 4, 5. Wenn das Kombinationsfeld zum ersten Mal geladen wird, wird standardmäßig der erste Wert ausgewählt, dh 1 wird ausgewählt.Wählen Sie das nächste Element aus der Combobox und klicken Sie auf eine Schaltfläche Excel VBA

Jetzt mit einem VBA-Makro, ich möchte nächsten Wert aus der Combobox-Liste (dh 2) auswählen und klicken Sie auf die Befehlsschaltfläche.

Ich googelte dies aber leider nicht bekommen, was ich erwarte. Hier

ist, was ich habe, so weit, aber es nicht tun, was ich erwarte (oben erläutert): Erste eine Fehlermeldung als Objekt unterstützt diese Eigenschaft oder Methode auf Linie If Worksheets("QC Update").ComboBox1.SelectedIndex < ComboBox1.Items.Count - 1 Then

Sub Select_Next_Items() 
    If IsEmpty(Range("A9").Value) = True Then 
    If Worksheets("QC Update").ComboBox1.SelectedIndex < ComboBox1.Items.Count - 1 Then 
     ComboBox1.ListIndex = 0 ' select first Item in listbox 
     ComboBox1.ListIndex = ComboBox1.ListCount - 1 ' selects last item 
     Set ComboBox1.SelectedIndex = Worksheets("QC Update").ComboBox1.SelectedIndex + 1 
     Set ComboBox1.ListCount = 0 
    End If  
    End If 
End Sub 
+0

Was haben Sie bisher versucht? Du musst uns etwas zeigen; bitte wenden Sie sich an [ask] –

+0

versuchen Sie das Oleobjects-Objekt aus der Arbeitsblattklasse –

+0

Was macht es? Hast du einen Fehler? Bitte editiere deine Frage, benutze keine Kommentare. –

Antwort

0

I frage mich, ob das deine Absicht ist.

Sub Select_Next_Item() 
    ' 07 Apr 2017 

    Dim Ws As Worksheet 
    Dim Cbx As OLEObject 
    Dim Ix As Integer 

    Set Ws = Worksheets("QC Update") 
    If IsEmpty(Ws.Range("A9").Value) = True Then 
     Set Cbx = Ws.OLEObjects("ComboBox1") 
     With Cbx.Object 
      Ix = .ListIndex + 1 
      If Ix = .ListCount Then Ix = 0 
      If .ListCount Then .ListIndex = Ix 
     End With 
    End If 
End Sub 

Wenn die Zelle A9 leer gefunden wird, sucht der Code auf der „ComboBox1“ (und stürzt ab, wenn es nicht auf dem gleichen, angegebenen Arbeitsblatt gefunden wird). Dadurch wird die Auswahl in dieser Combobox auf den nächsten Wert in der Liste geändert. Aber wenn es bereits beim letzten Listenelement war, wird es das erste auswählen, und wenn es keine Listenelemente in der Combobox gibt, wird es nichts tun.

+0

Danke für die Antwort, ich habe gerade den Namen des Arbeitsblatts in meinen Arbeitsblattnamen geändert und versucht, es auszuführen. Es gibt mir einen Fehler als Subskript außerhalb des Bereichs in Zeile 'Set Ws = Worksheets (" Update_QC.xlsm ")' –

+0

"Update_QC.xlsm" sieht wie ein Dateiname aus. Ws muss ein Arbeitsblatt sein. Es ist besser, einen echten Namen zu verwenden, aber für Ihre ersten Tests können Sie den Code einfach auf 'Set Ws = ActiveSheet' setzen – Variatus

0

endlich diese Probleme mit Code unten aufgelöst,

Set Cbx = Worksheets("QC Update").OLEObjects("ComboBox1") 
     With Cbx.Object 
      Ix = .ListIndex + 1 
      If Ix = .ListCount Then Ix = 0 
      If .ListCount Then .ListIndex = Ix 
     End With 
1

hoffe, euch hier fühlen sich nicht beleidigt, als ich eine klarere und eine eindeutige Antwort haben.

ComboBox1.ListIndex = ComboBox1.ListIndex +1 

Hier ist eine vollständige. Wir haben zu berücksichtigen, wenn es am Ende der Liste ist daher

If ComboBox1.ListIndex = ComboBox1.ListCount -1 Then 
    ComboBox1.ListIndex =1 

Else 
    ComboBox1.ListIndex = ComboBox1.ListIndex +1 

ich meine Antwort hoffen, die meisten von Ihnen hilfreich ist vor allem diejenigen, die Vba sind neu und brauchen es dringend zu verwenden.

Dies ist einfach zu verstehen, wenn Sie auf die Programmierung in C soliden Hintergrund haben ++/Java

Verwandte Themen