Автофильтр ничего не фильтрует при несоблюдении критериев

У меня есть сегмент VBA, который пытается автоматически отфильтровать все строки, в которых столбец 37 пуст. Он отлично работает, ЗА ИСКЛЮЧЕНИЕМ случаев, когда в столбце нет ничего для всего набора данных. Затем, вместо того, чтобы отфильтровать все, кроме строки заголовка, автофильтр не отфильтровывает никакие строки. Это приводит к добавлению комментария «Ожидаемые потери ко всем строкам, а не только к тем, которые имеют значение в столбце 37. Код приведен ниже. Любая помощь в том, что я делаю неправильно, будет очень признательна.

'   Filter Data by ExpectedWaste
Sheets("Data").Columns("A:AQ").AutoFilter Field:=37, Criteria1:="<>"


'   Add expected Waste comment
Sheets("Data").Range("AQ2:AQ" & lastRow).FormulaR1C1 = "Expected waste"


'   Unfilter Data
If (Sheets("Data").AutoFilterMode And Sheets("Data").FilterMode) Or 
Sheets("Data").FilterMode Then
    Sheets("Data").ShowAllData
End If

person Justin    schedule 22.03.2018    source источник


Ответы (2)


Обычно я проверяю видимые ячейки перед выполнением каких-либо действий.

with Sheets("Data").Cells("A1:AQ" & lastRow)
    .AutoFilter Field:=37, Criteria1:="<>"
    with .resize(.rows.count-1, .columns.count).offset(1, 0)
        if cbool(application.subtotal(103, .cells)) then
            'perform actions on .Specialcells(xlcelltypevisible) here
            .columns("AQ").Specialcells(xlcelltypevisible).value = "Expected waste"
        end if
    end with
end with
person Community    schedule 23.03.2018

Я не думаю, что AutoFilter работает с пустыми столбцами. Проверьте, есть ли что-нибудь, что нужно отфильтровать в первую очередь, что-нибудь в строке Cells(Rows.Count, 37).End(xlUp).Row > 1, потому что в противном случае код, который вы написали Sheets("Data").Range("AQ2:AQ" & lastRow).FormulaR1C1 = "Expected waste", заполняет весь столбец.

person CCM    schedule 23.03.2018
comment
Спасибо. Это решение, которое я использовал с оператором IF, чтобы проверить ›1 строку и затем выполнить действие. - person Justin; 26.03.2018