Новости:

Новая редакция правил форума: 2.4. Если вопрос или ответ содержится во вложенном файле, все-равно кратко описывайте в сообщении вопрос или суть решения. Это необходимо, чтобы тему можно было найти через поиск.

Главное меню

Макрос выборочного скрытия строк/столбцов

Автор Димычч, 10.09.2015, 05:21

« назад - далее »

Димычч

Добрый день. Довольно часто использую подсмотренный на этом сайте (или планетаэксель, не помню) макрос:
В заданной строке (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

Проблема в том, что если в строке, по которой проверяется наличие "звезды" попадается ячейка с ошибкой, то макрос тоже выдаёт ошибку и останавливается. Как дать ему понять, чтобы он не обращал внимания на такие ячейки?

cheshiki1

перед циклом добавить пропуск ошибок
On Error Resume Next

Димычч

#2
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

Цитироватьесли ... попадается ячейка с ошибкой...
Не должно так быть. Нужно не в коде обходить ошибку, а исключать ошибки на листе.

Димычч

#4
Да я абсолютно согласен, я тоже против ошибок! :) Но иногда мы находимся в рамках желаний руководства.
Задача: скрыть только помеченные звездой столбцы, игнорируя ВСЕ остальные

cheshiki1

vikttur имел ввиду в формулах избавтесь от ошибок =ЕСЛИ(ЕОШ(формула);"";формула)

cheshiki1

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

Димычч

Благодарю! Всё отлично.
А про ошибки... Просто не хотел грузить лишней инфой. На самом деле, в файле работает несколько человек, и возможны всякие казусы, а если я по ошибке скрою лишний стоолбец, который не помечен звездой, будет беда.