Добрый день. Довольно часто использую подсмотренный на этом сайте (или планетаэксель, не помню) макрос:
В заданной строке (1), вручную или формулой, ставлю "*" в тех столбцах, которые надо скрыть.
Dim cell As Range
Application.ScreenUpdating = False
For Each cell In ActiveSheet.UsedRange.Rows(1).Cells
If cell.Value = "*" Then cell.EntireColumn.Hidden = True
Next
Application.ScreenUpdating = True
End Sub
Проблема в том, что если в строке, по которой проверяется наличие "звезды" попадается ячейка с ошибкой, то макрос тоже выдаёт ошибку и останавливается. Как дать ему понять, чтобы он не обращал внимания на такие ячейки?
перед циклом добавить пропуск ошибок
On Error Resume Next
Dim cell As Range
Application.ScreenUpdating = False
For Each cell In ActiveSheet.UsedRange.Rows(1).Cells
On Error Resume Next
If cell.Value = "*" Then cell.EntireColumn.Hidden = True
Next
Application.ScreenUpdating = True
End Sub
В таком виде столбцы с ошибками просто скрываются вместе с остальными, помеченными звездами. Или я не так вставил?
Для оформления кода в сообщении - кнопка "#"[МОДЕРАТОР]
Цитироватьесли ... попадается ячейка с ошибкой...
Не должно так быть. Нужно не в коде обходить ошибку, а исключать ошибки на листе.
Да я абсолютно согласен, я тоже против ошибок! :) Но иногда мы находимся в рамках желаний руководства.
Задача: скрыть только помеченные звездой столбцы, игнорируя ВСЕ остальные
vikttur имел ввиду в формулах избавтесь от ошибок =ЕСЛИ(ЕОШ(формула);"";формула)
Dim cell As Range
Application.ScreenUpdating = False
For Each cell In ActiveSheet.UsedRange.Rows(1).Cells
If IsError(cell.Value)=False Then
If cell.Value = "*" Then cell.EntireColumn.Hidden = True
end if
Next
Application.ScreenUpdating = True
End Sub
Благодарю! Всё отлично.
А про ошибки... Просто не хотел грузить лишней инфой. На самом деле, в файле работает несколько человек, и возможны всякие казусы, а если я по ошибке скрою лишний стоолбец, который не помечен звездой, будет беда.