我正在尝试找出最佳方法,如何使用Excel If .Listindex = -1
进行多项选择,并使用简单的VBA代码根据ListBox中选择的内容过滤多个工作表。
我现在的代码如下。目前它几乎完全符合我的需要 - 检查工作表中是否有任何过滤器,如果是,则清除它,然后过滤掉所选值。但我需要它做的是,根本没有选择任何值,它应该清理4张过滤器并退出sub。
问题是,我得到了一个"无效的程序"如果我在没有选择任何内容时尝试运行它,则会出错。我确实尝试添加一个Else语句,另一个If检查Sub filter1()
Dim MyArray() As String
Dim Cnt As Long
Dim r As Long
Cnt = 0
With Me.ListBox1
If .ListIndex <> -1 Then
For r = 0 To .ListCount - 1
If .Selected(r) Then
Cnt = Cnt + 1
ReDim Preserve MyArray(1 To Cnt)
MyArray(Cnt) = .List(r)
End If
Next r
End If
End With
With Sheet1
If .FilterMode Then .ShowAllData
.Range("A2:Y1037").AutoFilter field:=2, Criteria1:=MyArray, Operator:=xlFilterValues
End With
With Sheet3
If .FilterMode Then .ShowAllData
.Range("A2:AB1037").AutoFilter field:=2, Criteria1:=MyArray, Operator:=xlFilterValues
End With
With Sheet4
If .FilterMode Then .ShowAllData
.Range("A2:Z1037").AutoFilter field:=2, Criteria1:=MyArray, Operator:=xlFilterValues
End With
With Sheet5
If .FilterMode Then .ShowAllData
.Range("A2:Z1037").AutoFilter field:=2, Criteria1:=MyArray, Operator:=xlFilterValues
End With
End Sub
,但两个选项都给出了完全相同的错误。
由于这需要是一个多选列表,我发现它还需要循环,同时检查是否有任何选择,但又一次,有相同的错误。
如何改进此代码并添加所需的功能?
head
答案 0 :(得分:1)
检查cnt是否为0表示在使用Sheet1的行之前,如果cnt为0表示在ListBox中没有选择任何内容,则提示用户并使用exit sub,如下所示...
If cnt = 0 Then
MsgBox "No item was selected in the ListBox." & _
"Please select an item and then try again...", vbCritical, "No Item Selected"
Exit Sub
End If
With Sheet1
End With
答案 1 :(得分:0)
当你有多选时,Listindex没有帮助。因此,在使用
循环后,不要使用If .ListIndex <> -1 Then
检查cnt
If cnt = 0 'nothing selected
'code for no selection
else
'code with selection
end if