#excel #vba
#excel #vba
Вопрос:
Я пытаюсь отфильтровать столбец «I» с заголовком «Stock», чтобы отображать только столбцы со значением больше «5» в названии листа «Порядок в единицах измерения».
Я получаю отладчик.
Sub AutoFilter_Number_Examples()
'Examples for filtering columns with NUMBERS
Dim lo As ListObject
Dim iCol As Long
'Set reference to the first Table on the sheet
Set lo = Order in Units.ListObjects(1)
'Set filter field
iCol = lo.ListColumns("Stock").Index
'Clear Filters
lo.AutoFilter.ShowAllData
With lo.Range
.AutoFilter Field:=iCol, Criteria1:=">5"
End With
End Sub
Ответ №1:
Это то, что вы хотите? (Например, столбец D)
Sub AutoFilter_Number_Examples()
On Error Resume Next
Columns("D:D").AutoFilter.ShowAllData
On error goto 0
Columns("D:D").AutoFilter
ActiveSheet.Range("D:D").AutoFilter Field:=1, Criteria1:=">5"
End Sub
Я добавляю обработчик ошибок для ShowAllData, потому что в противном случае, если данные уже не отфильтрованы, произойдет сбой.
Комментарии:
1. Вы должны добавить
On Error GoTo 0
после ShowAllData, так как вам не нужен обработчик ошибок после2. Да, это еще один способ сделать это @romulax14, но я думаю, что это эквивалентно 🙂 Добро пожаловать, Джонатан ! 😉 (Вы могли бы сделать это и с помощью macro recorder)
3. @Macronaute Нет, это не так, использование
On Error Resume Next
сообщает Excel игнорировать все ошибки ниже этой строки и просто переходить к следующей строке, когда она есть. В вашей ситуации вы не хотите, чтобы Excel игнорировал все ошибки, только ту, которая вызвана ShowAllData. Итак, вы должны поставитьOn Error GoTo 0
после ShowAllData, чтобы сообщить Excel прекратить игнорировать ошибки после этой строки. Это сбрасывает обработчик ошибок. Без этого OP не сможет выполнять отладку, поскольку каждая ошибка будет просто проигнорирована. Игнорирующий обработчик начинается сOn Error Resume Next
и заканчиваетсяOn Error GoTo 0
, с кодом между ними.4. Хорошо, извините @romulax14, я думал,
On Error Resume Next
просто работал над следующей строкой!