2013-11-22 3 views
1

Еще раз у меня возникают проблемы при попытке использовать критерии массива в автофильтрах. Может быть, кто-то сможет это решить.Передача строковой переменной в массив критериев автоматического фильтра VBA

У меня есть строки критериев на листе excel в следующем формате: 12562,15215 (они редактируются пользователями).

Что я хочу сделать, так это для того, чтобы цикл принимал каждую ячейку, содержащую эти критерии, и автофильтр определенного поля в другой книге, используя содержимое ячейки в виде массива, а затем переходите к следующей строке критериев.

Петля кажется прекрасной (я могу ошибаться), но когда дело доходит до автофильтра, он не находит никаких ячеек. Строковая переменная не будет корректно переходить к массиву критериев фильтра (если я просто жестко задаю критерии фильтрам - все работает).

Имеет ли в моем коде некоторые ошибки, или же весь подход ошибочен?

Любая помощь приветствуется.

Dim ExcRange As Range 
Dim Col As Range 
Dim Filter1 As Variant 
With RawData.Worksheets(1) 
.AutoFilterMode = False 
End With 
Dim Lastrow3 As Integer 
Lastrow3 = RawData.Worksheets(1).Cells(Rows.Count, "O").End(xlUp).Row 
Set ExcRange = RawData.Worksheets(1).Range("O11:O" & Lastrow3) 

For Each Col In ExcRange 

    If Not Col Is Nothing Then 

    Filter1 = Split(Col.Value, ",") 


    With NewBook.Worksheets(1) 


     .Cells.AutoFilter Field:=1, Criteria1:=Array(Filter1), Operator:=xlFilterValues, Operator:=xlAnd 

    End With 

    Else 
    End If 

Next Col 

Я также попытался кодирования автофильтрами таким образом:

.Cells.AutoFilter Field:=5, Criteria1:=Filter1, Operator:=xlFilterValues, Operator:=xlAnd 
+0

есть только номер в 'ExcRange', подобный этому' 12562', или числа с кавычками, такими как «12562». –

ответ

1

Я думаю, что вам нужно both- удалить кавычки и сделать массив в каждой ячейке. Вы можете добиться этого, позвонив как Split, так и Replace. Попробуйте сделать это таким образом:

Filter1 =Split(Replace(Col.Value, Chr(34), ""), ",") 
Filter2 = Split(Replace(Col.Offset(0, 1).Value, Chr(34), ""), ",") 
Filter3 = Split(Replace(Col.Offset(0, 2).Value, Chr(34), ""), ",") 

и поддерживать фильтрацию таким образом ...Criteria1:=Array(Filter1)...

Это работает, если я сделал пробный тест.

+0

Я могу попросить пользователей ввести информацию без кавычек. я попробовал split - но для этого мне нужно изменить переменную Filter1 в Variant. если я делаю это, он все равно не работает, автофильтр не понимает массив чисел, если по какой-то причине он является вариантом. Я упростил свой код для одной полевой фильтрации и изменил в соответствии с вашими рекомендациями - см. Выше. –

+0

@Mr_Oppenheimer, вы используете английскую версию Office? Используете ли вы COMMA (12,20) или DOT (12.20) для разделения десятичных чисел? –

+0

Да, это английская версия. десятичные числа, разделенные запятой. Мне также интересно, может ли это иметь какое-то отношение к форматированию фильтруемых ячеек? Клетки, из которых приходят критерии, отформатированы как текст –

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