Страницы: 1
RSS
Автофильтр VBA - нет значений указанных по фильтру
 
Добрый день!
Прошу о помощи!!!)))

есть авто фильтр в коде, и могут быть случае когда не будет данных по условиям автофильтра, как бы ему сказать, что если нет значения иди вот сюда.
ничего толкового так и не получилось за весь день((
код автофильтра совсем не замудренный
Код
ActiveSheet.Range("h2").AutoFilter Field:=8, Criteria1:= _
        "=1, Operator:=xlOr, Criteria2:= _
        "=2"
 
Цитата
spa написал:
как бы ему сказать, что если нет значения иди вот сюда
??? ... : / ... ???

Код
    On Error Resume Next
        
        With ActiveSheet.Range("H2")
            .AutoFilter Field:=2, Criteria1:="=1", Operator:=xlOr, Criteria2:="=2"
        End With
        
    On Error GoTo 0
 
ocet p,
Отсутствие значения не вызовает ошибку, а просто скрывает всё

Цитата
spa: как бы ему сказать
посмотреть под шапкой - если пусто, значит ничего не было. То есть, если шапка в H2, то проверить H3 на пустоту, и, если пусто, то "сказать, куда идти" и скинуть автофильтр тоже не мешало бы
Что-то типа того (не тестил)
Изменено: Jack Famous - 23.03.2021 09:12:21
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
такое тоже тестировалось, но пустой фильтр( то есть отсутствие по отбору) не является ошибкой, чтобы он пошел дальше.
поэтому видимо остается только ставить фильтр, а потом считать количество строк, которое получается и если оно меньше 2 то типа завершать эти делишки и это как то загонно очень((
Изменено: spa - 23.03.2021 10:00:10
 
Цитата
Jack Famous написал:
если шапка в H2, то проверить H3 на пустоту
как-то это не совсем то, на мой взгляд. Ведь Н3 это просто следующая после заголовка ячейка. Она может быть скрыта или видима условиями фильтрации и может быть при этом как пустой, так и нет.
Поэтому можно сделать что-то вроде этого:
Код
Sub TestFilter()
    Dim rr As Range, rFilter As Range, rc As Range
    ActiveSheet.Range("A1:H20").AutoFilter Field:=8, _
                Criteria1:="=1", Operator:=xlOr, Criteria2:="=2"
    
    Set rFilter = ActiveSheet.AutoFilter.Range
    Set rr = rFilter.SpecialCells(xlCellTypeVisible)
    If Not rr Is Nothing Then
        If rr.Areas.Count = 1 Then
            If rr.Areas(1).Rows.Count = 1 Then
                MsgBox "Фильтром ничего не отобрано", vbInformation, "www.excel-vba.ru"
            End If
        End If
    End If
End Sub
т.к. от автора примера нет - где и как устанавливается фильтр мы не знаем: на умную таблицу или просто на лист. А на одну ячейку как в стартовом коде он не может быть установлен. Так что автору придется просто подстроиться под свои условия.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
Так что автору придется просто подстроиться под свои условия.
Спасибо большое!
подстроил, с условием если не пусто добавил else и все огонь!
Спасибо большое!!!
 
Цитата
Дмитрий(The_Prist) Щербаков: Она может быть скрыта или видима условиями фильтрации и может быть при этом как пустой, так и нет
согласен - имел ввиду (но не написал) проверять первую видимую ячейку после фильтра  :)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Здравствуйте.
Подскажите пожалуйста, как подправить данный код, чтоб работал, если в фильтруемой области есть скрытые столбцы?
Код
Sub TestFilter()
    Dim rr As Range, rFilter As Range
        ActiveSheet.Range("A1:H20").AutoFilter Field:=8, Criteria1:="=1" ', Operator:=xlOr, Criteria2:="=2"

    Set rFilter = ActiveSheet.AutoFilter.Range
    Set rr = rFilter.SpecialCells(xlCellTypeVisible)
    If Not rr Is Nothing Then
        If rr.Areas.Count = 1 Then
            If rr.Areas(1).Rows.Count = 1 Then
                MsgBox "Фильтром ничего не отобрано", vbInformation, "www.excel-vba.ru"
            End If
        End If
    End If
End Sub
Если нет значений указанных по фильтру и в фильтруемой области есть скрытые столбцы rr.Areas.Count не равен 1.
 
Логично же - надо проверять любой видимый столбец(в примере это 1-ый - А):
Код
Sub TestFilter()
    Dim rr As Range, rFilter As Range
        ActiveSheet.Range("A1:H20").AutoFilter Field:=8, Criteria1:="=1" ', Operator:=xlOr, Criteria2:="=2"
 
    Set rFilter = ActiveSheet.AutoFilter.Range
    Set rr = Intersect(rFilter, rFilter.Parent.Columns(1))
    If rr Is Nothing Then
        Exit sub
    End If
    Set rr = rr.SpecialCells(xlCellTypeVisible)
    If Not rr Is Nothing Then
        If rr.Areas.Count = 1 Then
            If rr.Areas(1).Rows.Count = 1 Then
                MsgBox "Фильтром ничего не отобрано", vbInformation, "www.excel-vba.ru"
            End If
        End If
    End If
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Дмитрий(The_Prist) Щербаков, Спасибо Большое!!!
 
Дмитрий(The_Prist) Щербаков, Здравствуйте.
Код
Set rFilter = ActiveSheet.AutoFilter.Range
Ругается, если фильтр применён в автоматической таблице.
Пишет: "Run-time error '91':
Object variable or With block variable not set
Подскажите пожалуйста, как подправить, чтоб с автоматическими таблицами работал?
Страницы: 1
Наверх