我正在尝试使用VBA在Excel中为表格实现自动过滤,我的过滤条件是单元格B2 - B7中的值。如果任何标准留空(即任何单元格B2-B7保留为空白),则VBA按空白字符串过滤该特定字段并且不给出任何结果。知道怎么让VBA忽略那个特定的标准,然后继续下一个?以下是我的尝试:
Sub sbFilterTable()
ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=6, Criteria1:=Range("B2").Text
ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=7, Criteria1:=Range("B3").Text
ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=8, Criteria1:=Range("B4").Text
ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=1, Criteria1:=Range("B5").Text
ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=2, Criteria1:=Range("B6").Text
ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=4, Criteria1:=Range("B7").Text
End Sub
^当B2-B7中的任何一个单元格留空时,这个会中断,因为该表是按空白文本过滤的。我的问题是,如果Range()
为空,我该如何对此进行编程,以便VBA转到下一个标准而不过滤该字段中的任何内容?
然后我尝试了这个:
Sub sbFilterTable()
If Range("B2") <> "" Then
ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=6, Criteria1:=Range("B2").Text
ElseIf Range("B3") <> "" Then
ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=7, Criteria1:=Range("B3").Text
ElseIf Range("B4") <> "" Then
ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=8, Criteria1:=Range("B4").Text
ElseIf Range("B5") <> "" Then
ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=1, Criteria1:=Range("B5").Text
ElseIf Range("B6") <> "" Then
ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=2, Criteria1:=Range("B6").Text
ElseIf Range("B7") <> "" Then
ActiveWorkbook.Sheets("Sheet1").ListObjects("Table1").Range.AutoFilter Field:=4, Criteria1:=Range("B7").Text
Else
End If
End Sub
^这个问题是如果B2不是空白,程序就会结束......我的问题是,如果Range()
不为空,我该如何阻止程序终止?即即使B2不是空白,我如何让程序查看下一个标准?
初学者到VBA ......任何帮助都将不胜感激