Как автоматически фильтровать столбец?

#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 просто работал над следующей строкой!