Excel VBA多选列表框检查是否没有被选中
我想弄清楚如何使用多选Excel Excel ListBox
的最佳方法,并有一个简单的VBA代码,它可以筛选多个基于ListBox中选定的工作表。
我现在的代码在下面。 目前,它几乎完全符合我的需求 – 检查工作表中是否有任何filter,如果是,则清除它,然后过滤掉所选的值。 但是我也需要这样做,就是根本没有select任何值,它应该清理4张filter并退出子filter。
事情是,如果我没有select任何东西,我试图运行它,我得到一个“无效的程序”错误。 我曾尝试添加一个Else语句,另一个如果检查If .Listindex = -1
,但是两个选项都给出了完全相同的错误。 因为这需要一个多选列表,我发现它也需要循环,同时检查是否没有被选中,但又一次,有同样的错误。
我怎样才能改善这个代码并添加所需的function?
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
检查cnt是否为0,并且如果cnt为0,表示在ListBox中没有select任何内容,则提示用户并使用如下的exit子…
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
当你有多选时,Listindex不起作用。 所以,而不是使用If .ListIndex <> -1 Then
检查你的循环后你的循环
If cnt = 0 'nothing selected 'code for no selection else 'code with selection end if