Я пытаюсь автоматизировать обработку различных отчетов, которые мне просто нужно фильтровать и подсчитывать строки. В настоящее время у меня есть сценарий PowerShell, который открывает каждый отчет и запускает несколько макросов. Это примерно в рабочем состоянии, но теперь я хотел бы сделать его немного более умным и поймать некоторые из неудач, поэтому я мог бы задать несколько вопросов, но я буду придерживаться одной проблемы для каждого.Как я могу автофильтировать, когда я не уверен, какой столбец он будет?
Отчеты имеют похожие, но не идентичные макеты. Я ищу конкретное имя столбца, а затем автофильтр. У меня есть очень простой и bodged вместе макрос, который в настоящее время делает это, и работает (в большинстве случаев), например, иногда колонки я хочу А или Б:
If Worksheets(1).Range("A1") Like "*word" Then
Worksheets(1).Range("A1").AutoFilter Field:=1, Criteria1:="=criteria1", Operator:=xlOr, Criteria2:="=criteria2"
ElseIf Worksheets(1).Range("B1") Like "*word" Then
Worksheets(1).Range("A1").AutoFilter Field:=2, Criteria1:="=criteria", Operator:=xlOr, Criteria2:="=criteria2"
Будем надеяться, что дает текущую картину.
Теперь я хочу вместо этого выполнить поиск заголовка поля, который я ищу, а затем отфильтровать этот столбец, поэтому, если формат отчета в будущем изменится, мой макрос не сломается. Нечто похожее на:
ColNum = Application.Match("*header", Range("A:Z"), 0)
ColNumInt = CInt(ColNum)
If ColNumInt > 0 Then
ActiveSheet.Range("A1").AutoFilter Field:=ColNumInt, Criteria1:="=criteria1*", Operator:=xlAnd
End If
Но это дает ошибку «метод автофильтр класса Range не удалось», Googlefu говорит отключить фильтры, но они уже выключен. Поэтому я немного застрял.
Это сработало, спасибо. Из интереса есть лучший способ следить за такими ошибками? – Chris
Лучше, каким образом? 'IsError' поймает какую-либо ошибку здесь. – Rory
Извините, как и в том, что я не понимал, что Match выбрасывает ошибку, и это была настоящая причина отказа фильтра, проходящая через макрос. Может ли это быть «обработано» лучше? – Chris