2016-10-27 3 views
0

В настоящее время у меня есть код для фильтрации для определенных предметов в 3 колонках. Есть ли ограничение на автофильтр, которое позволяет фильтровать только 2 столбца? как только я добавлю фильтр 3-го столбца, я получаю ошибку «Autofilter method of range class failed». если есть ограничение, есть ли способы обхода?Автофильтр с 3 колонками

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 

ответ

2

Ваш третий фильтр иногда (часто? Обычно?) Не работает, потому что вы пытаетесь фильтровать на 66-м столбце диапазона.

Однако, если BR6 находится между 1 и 9, то вы определили диапазон фильтра A:BL, который имеет ширину всего 64 столбца.

И если BR6 не находится между 1 и 9, но BR15 находится между 1 и 3, то вы определили диапазон фильтра A:BK, который имеет ширину всего 63 колокола.

Единственный способ, с помощью которого работает последний фильтр, - это если вы не используете ни один из первых двух фильтров, потому что в этой ситуации вы устанавливаете диапазон A:BQ.

Я предлагаю вам установить фильтр на столбцах A:BN во всех ситуациях.

+0

Спасибо за помощь. Я изменил свой код и по-прежнему получает ту же ошибку в той же части, в поле фильтра для 66 – Daruki

+0

. Смотрите OP для обновленного кода – Daruki

+0

Nevermind, я забыл очистить фильтр. Благодаря! все работает! ваше объяснение было очень хорошим! – Daruki

Смежные вопросы