2017-05-22 5 views
0

Excel 2013 mit VBA. Ich habe eine ComboBox, die mir erlaubt, RestDays Mon, Tue, Wed, und so weiter zu wählen.
Wenn ich Mon wähle, möchte ich alle Agenten, die RD am Montag hat, in der ListBox angezeigt. Im Beispiel kann ich es anzeigen, aber es bezieht sich nur auf eine einzelne Spalte, ich möchte in der Lage sein, auch die andere Spalte zu verwenden.Sie erhalten ihren Namen basierend auf 2 Spalten in Excel

Screenshot

Hier ist mein Code:

Private Sub cmbRestDay_Change() 
    Dim x, dict 
    Dim i As Long 
    Dim cnt As Long 

    Set mySheet = Sheets("Dashboard") 
    ListBox1.Clear 
    x = mySheet.Range("A1").CurrentRegion.Value 
    Set dict = CreateObject("Scripting.Dictionary") 

    If Application.CountIf(mySheet.Columns(2), cmbRestDay.Value) > 0 Then 
     For i = 2 To UBound(x, 1) 
      If x(i, 2) = cmbRestDay.Value Then 
       dict.Item(x(i, 1)) = "" 
      End If 
     Next i 
     ListBox1.List = dict.keys 
    Else 
     ListBox1.AddItem "Match not found" 
    End If 
End Sub 


Private Sub UserForm_Initialize() 
    cmbRestDay.Clear 
    With cmbRestDay 
     .AddItem ("Mon") 
     .AddItem ("Tue") 
     .AddItem ("Wed") 
     .AddItem ("Thu") 
     .AddItem ("Fri") 
     .AddItem ("Sat") 
     .AddItem ("Sun") 
    End With 

    cmbMyRD.Clear 
    With cmbMyRD 
     .AddItem ("Mon") 
     .AddItem ("Tue") 
     .AddItem ("Wed") 
     .AddItem ("Thu") 
     .AddItem ("Fri") 
     .AddItem ("Sat") 
     .AddItem ("Sun") 
    End With 
End Sub 

Antwort

1

den Or logischen Operator verwenden:

If Application.CountIf(mySheet.Columns("B:C"), cmbRestDay.Value) > 0 Then 
    For i = 2 To UBound(x, 1) 
     If x(i, 2) = cmbRestDay.Value Or x(i, 3) = cmbRestDay.Value Then 
+0

Vielen Dank YowE3K..that arbeitet jetzt ..Ich wird Ich muss mich auf die Codes konzentrieren, die für mich jetzt ungewohnt sind wie der UBound. –

0
Private Sub cmbRestDay_Change() 
    Dim x As Integer 

    Set mySheet = Sheets("Dashboard") 
    ListBox1.Clear 

    If Application.CountIf(mySheet.Range("A:B"), "*" & cmbRestDay.Value & "*") > 0 Then 
     For x = 2 To Application.CountA(mySheet.Columns(1)) 
      If mySheet.Cells(x, 2) = cmbRestDay.Value Or mySheet.Cells(x, 3) = cmbRestDay.Value Then 
       ListBox1.AddItem (mySheet.Cells(x, 1)) 
      End If 
     Next 
    Else 
     ListBox1.AddItem ("Match not found") 
    End If 
End Sub 
+0

Sie sollten 'Interger' niemals verwenden, wenn Sie' Long' verwenden können (Excel hat mehr Zeilen als Integer verarbeiten kann). Und Sie sollten 'mySheet As Worksheet' deklarieren. Ich empfehle [immer Option Explicit] zu verwenden (http://stackoverflow.com/documentation/excel-vba/1107/vba-best-practices). –

Verwandte Themen