Excel VBA多选ListBox检查是否未选中任何内容

时间:2017-04-13 07:53:25

标签: excel vba excel-vba listbox

我正在尝试找出最佳方法,如何使用Excel If .Listindex = -1进行多项选择,并使用简单的VBA代码根据ListBox中选择的内容过滤多个工作表。

我现在的代码如下。目前它几乎完全符合我的需要 - 检查工作表中是否有任何过滤器,如果是,则清除它,然后过滤掉所选值。但我需要它做的是,根本没有选择任何值,它应该清理4张过滤器并退出sub。

问题是,我得到了一个&#34;无效的程序&#34;如果我在没有选择任何内容时尝试运行它,则会出错。我确实尝试添加一个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

2 个答案:

答案 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
相关问题