使用VBA的Excel 2013。
我有一个ComboBox,允许我选择RestDays Mon
,Tue
,Wed
等。
如果我选择Mon
,我希望星期一有RD的所有代理都显示在ListBox中。在示例中,我可以显示它,但它只引用单列,我希望能够使用另一列。
这是我的代码:
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
答案 0 :(得分:1)
使用Or
逻辑运算符:
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
答案 1 :(得分: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