带3列的自动filter

我目前有代码来筛选3列中的特定项目。 自动filter是否有限制,只允许2列进行过滤? 一旦我添加第三列filter,我得到“自动过滤范围类失败的方法”的错误。 如果有限制,是否有任何解决方法?

Public Sub autofilterOffical() Dim ws As Worksheet Dim wsOut As Worksheet Dim a As String Dim b As String Dim c As String Dim d As String Dim e As String Dim f As String Dim g As String Dim h As String Dim i As String Dim j As String Dim k As String Dim l As String Dim m As String Set ws = Worksheets("Data") AutoFilterMode = False a = ws.Range("bq6") b = ws.Range("bq7") c = ws.Range("bq8") d = ws.Range("bq9") e = ws.Range("bq10") f = ws.Range("bq11") g = ws.Range("bq12") h = ws.Range("bq13") i = ws.Range("bq14") j = ws.Range("bq15") k = ws.Range("bq16") l = ws.Range("bq17") m = ws.Range("bq18") If ws.Range("br18") = "1" Then ws.Range("A:Bn").autofilter field:=66, Criteria1:=Array(m), _ Operator:=xlFilterValues Else End If If ws.Range("br6") = "1" Then ws.Range("a:bn").autofilter field:=64, Criteria1:=Array(a), _ Operator:=xlFilterValues ElseIf ws.Range("br6") = "2" Then ws.Range("a:bn").autofilter field:=64, Criteria1:=Array(a, b), _ Operator:=xlFilterValues ElseIf ws.Range("br6") = "3" Then ws.Range("a:bn").autofilter field:=64, Criteria1:=Array(a, b, c), _ Operator:=xlFilterValues ElseIf ws.Range("br6") = "4" Then ws.Range("a:bn").autofilter field:=64, Criteria1:=Array(a, b, c, d), _ Operator:=xlFilterValues ElseIf ws.Range("br6") = "5" Then ws.Range("a:bn").autofilter field:=64, Criteria1:=Array(a, b, c, d, e), _ Operator:=xlFilterValues ElseIf ws.Range("br6") = "6" Then ws.Range("a:bn").autofilter field:=64, Criteria1:=Array(a, b, c, d, e, f), _ Operator:=xlFilterValues ElseIf ws.Range("br6") = "7" Then ws.Range("a:bn").autofilter field:=64, Criteria1:=Array(a, b, c, d, e, f, g), _ Operator:=xlFilterValues ElseIf ws.Range("br6") = "8" Then ws.Range("a:bn").autofilter field:=64, Criteria1:=Array(a, b, c, d, e, f, g, h), _ Operator:=xlFilterValues ElseIf ws.Range("br6") = "9" Then ws.Range("a:bn").autofilter field:=64, Criteria1:=Array(a, b, c, d, e, f, g, h, i), _ Operator:=xlFilterValues ElseIf ws.Range("br6") = "0" Then Else End If If ws.Range("br15") = "1" Then ws.Range("a:bn").autofilter field:=63, Criteria1:=Array(j), _ Operator:=xlFilterValues ElseIf ws.Range("br15") = "2" Then ws.Range("a:bn").autofilter field:=63, Criteria1:=Array(j, k), _ Operator:=xlFilterValues ElseIf ws.Range("br15") = "3" Then ws.Range("a:bn").autofilter field:=63, Criteria1:=Array(j, k, l), _ Operator:=xlFilterValues Else End If Call copy End Sub 

您的第三个筛选器有时(通常是?)通常会失败,因为您正在尝试筛选该范围的第66列。

但是,如果BR6介于1和9之间,那么您已经将过滤范围定义为A:BL ,它只有64列宽。

如果BR6不在1和9之间,但是BR15在1和3之间,那么你已经将滤波范围定义为只有63列宽的A:BK

最终filter工作的唯一方法是,如果您没有执行前两个filter中的任何一个,因为在这种情况下,您将范围设置为A:BQ

我build议你把你的filter设置在所有情况下的列A:BN上。