Автофильтр путем ввода массива путем выбора диапазона критериев vba excel

edit # 1 Я пытаюсь автоматически отфильтровать лист на основе критериев в виде массива, значения массива выбираются с помощью диалогового окна для выбора диапазона. Кроме того, это целью диалогового окна является выбор нескольких несортированных значений, которые необходимо отсортировать. Вот код:

Sub Hyperlink_opener()
Dim Selrng As Range
Dim srch_cr As Variant
Set Selrng = Application.InputBox("Select a range", "Obtain Range Object", Type:=8)

srch_cr = Array(Selrng)
Sheets("DocLog").Select
ActiveSheet.Range("$A:$F").AutoFilter Field:=1, Criteria1:=srch_cr, Operator:=xlFilterValues
'ActiveWindow.SmallScroll Down:=-15

End Sub

В настоящее время это не ищет ячейку, которую я выбрал, и дает мне ошибку. Метод автофильтра класса диапазона не выполнен.


person Kakeda    schedule 18.03.2015    source источник


Ответы (2)


Это будет делаться до тех пор, пока выбранный вами диапазон содержит текст или числа, хранящиеся в виде текста:

Sub Hyperlink_opener()
Dim Selrng As Range
Dim srch_cr As Variant

Set Selrng = Application.InputBox("Select a range", "Obtain Range Object", Type:=8)
srch_cr = Application.WorksheetFunction.Transpose(Selrng)
Sheets("DocLog").Range("$A:$F").AutoFilter Field:=1, Criteria1:=srch_cr, Operator:=xlFilterValues
End Sub

Обратите внимание, что вам нужно транспонировать диапазон, чтобы превратить его в одномерный диапазон. Кроме того, нет необходимости Select листа, просто обратитесь к нему.

Если у вас есть числа, которые необходимо отфильтровать, вы можете либо сохранить их в виде текста в диапазоне фильтра, либо преобразовать их в текст в коде, проанализировав массив.

person Doug Glancy    schedule 19.03.2015

Основываясь на вашем Operator:=xlOr, я думаю, вы хотели бы отфильтровать по нескольким критериям.

Согласно документам Microsoft ( для Excel 2010) у вас может быть 2 критерия, и Operator:= указывает, что делать с двумя из них. В вашем случае код будет таким:

ActiveSheet.Range("$a:$F").AutoFilter Field:=1, _
             Criteria1:=Srch_Cr(1), Criteria2:=Srch_Cr(2), Operator:=xlOr

Вы не можете просто передать массив параметру Criteria1 и предположить, что функция .AutoFilter сама выяснит, что с ним делать.

person FreeMan    schedule 18.03.2015
comment
У меня есть более двух полей, которые я хочу отсортировать в одном и том же столбце, поэтому я добавил диалоговое окно выбора диапазона. А команда Или позволяет убедиться, что все поля в выбранном диапазоне видны в автоподгонке. Поскольку количество критериев является динамическим, означает ли это, что для 100 документов, которые я хочу найти, мне придется писать критерии 100 раз, а не вводить их в массив??? - person Kakeda; 18.03.2015
comment
Передача массива в .AutoFilter - это не та функция, о которой я знаю. Это также не соответствует документации (ссылке) для Критериев 1: The criteria (a string; for example, "101"). Если у вас есть пример того, как это работает, мне было бы очень интересно увидеть это, потому что это звучит очень полезно. ! - person FreeMan; 18.03.2015