L oop и выберите диапазоны, если одни листы содержат автофильтр, а другие нет. - PullRequest
0 голосов
/ 29 мая 2020

У меня есть файл Excel с несколькими листами. Некоторые из них содержат AutoFilter. Некоторые другие нет.
Теперь я хочу l oop через все из них и

a) если у них есть Autofilter, первая не скрытая ячейка под * Следует выбрать 1009 *.
b) если все строки скрыты, ниже AutoFilter следует выбрать Cell B29.
c) если на листе нет AutoFilter, следует выбрать Cell CB29.


Я пытался объединить решения из этого вопроса и этого вопроса , но пока не смог заставить его работать:

Sub Select_Range ()
Dim b As Worksheet
For Each b In Worksheets
    If b.AutoFilterMode _
    Or b.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 _
    Then
    b.Select
    b.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, 2).Select
    Else
    b.Select
    b.Range("B29").Select
    End If
Next b
End Sub

Я получаю runtime error 91.

Что мне нужно изменить в моем l oop, чтобы он работал?

1 Ответ

1 голос
/ 29 мая 2020

Если AutoFilterMode ложно, автоматический фильтр не активен - и в этом случае AutoFilter не установлен. Это вызывает ошибку времени выполнения 91.

Вы должны проверить AutoFilterMode и AutoFilter в двух отдельных If -задачах, потому что вам нужно убедиться, что AutoFilter установлен перед его проверкой. VBA всегда будет оценивать все части IF-оператора.

Попробуйте что-нибудь вроде

For Each b In ThisWorkbook.Worksheets
    b.Select
    b.Range("B29").Select
    If b.AutoFilterMode Then
        If b.AutoFilter.Range.Columns(1).SpecialCells(xlCellTypeVisible).Count > 1 Then
            b.AutoFilter.Range.Offset(1).SpecialCells(xlCellTypeVisible).Cells(1, 2).Select
        End If
    End If
Next b

(вам следует подумать о лучших именах переменных, b действительно не лучшее имя для рабочего листа.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...