Скрытие и отображение макросов не будут работать после блокировки столбцов и защиты листа.

Вопрос или проблема

У меня есть два столбца, E и G, в которых находятся формулы, поэтому я заблокировал эти столбцы и защитил лист, на котором они находятся. У меня есть две кнопки на листе: кнопка Скрыть и Показать. После блокировки этих столбцов и защиты листа макросы, назначенные на эти кнопки, больше не работают. Когда я выбираю кнопки, я получаю ошибку времени выполнения ‘1004’, невозможно установить свойство Hidden класса Range.
Код макроса следующий:

Sub Hide()
'
' Макрос Скрыть
'
' Горячая клавиша: Ctrl+Shift+H
'
    For Each c In Range("C7:C446")
    If IsEmpty(c.Value) Then
    'Если (c.Value) = "" Тогда
     c.EntireRow.Hidden = True
    End If
    Next c

End Sub

Макрос Показать:

Sub UH()
'
' Макрос UH
'

'
    Rows("6:447").Select
    Selection.EntireRow.Hidden = False
End Sub

Я думаю, что мне нужно добавить команду снятия защиты, которую я пробовал, но она, похоже, не работает. Я пытался:

Worksheets("JE").Unprotect Password:="ImportLCPA17", UserInterfaceOnly:=True

Кто-нибудь знает, какие изменения я могу внести, чтобы эти макросы скрытия и показа, связанные с кнопками, работали, оставаясь с заблокированными столбцами?

Вот что сработало для меня:

Чтобы первоначально снять защиту с листа:
Worksheets("name").Unprotect Password:="password"

Чтобы снова защитить лист:
Worksheets("name").Protect Password:="password"

Ответ или решение

Решение проблемы с макросами «Скрыть» и «Показать» после защиты листа в Excel

Если вы столкнулись с проблемой, связанной с неработоспособностью макросов в таком контексте, как защита листа Excel, это может быть довольно распространенной ситуацией. Давайте подробным образом разберем причины возникновения ошибки и потенциальные решения.

Причина проблемы

Ошибка «Run-time error ‘1004’: unable to set the Hidden property of the Range class» возникает из-за того, что при защите листа Excel ограничения не позволяют изменять состояние видимости строк. Поэтому ваши макросы «Скрыть» и «Показать» не работают, пока лист защищен.

Решение

Для решения этой проблемы необходимо внести некоторые изменения в код ваших макросов. Вам действительно нужно использовать команды для снятия защиты с листа перед выполнением задач, а затем повторно активировать защиту. Вот как можно реализовать этот процесс:

  1. Снятие защиты с листа перед выполнением макроса.
  2. Выполнение необходимого действия (скрытие или показ строк).
  3. Снова защита листа после выполнения действий.

Вот обновленный код для ваших макросов:

Макрос «Скрыть»:
Sub Hide()
    ' Снятие защиты с листа
    Worksheets("JE").Unprotect Password:="ImportLCPA17"

    On Error GoTo ErrorHandler  ' Обработка ошибок

    For Each c In Range("C7:C446")
        If IsEmpty(c.Value) Then
            c.EntireRow.Hidden = True
        End If
    Next c

    ' Защита листа после выполнения макроса
    Worksheets("JE").Protect Password:="ImportLCPA17"
    Exit Sub

ErrorHandler:
    MsgBox "Произошла ошибка: " & Err.Description
    ' Защита листа в случае ошибки
    Worksheets("JE").Protect Password:="ImportLCPA17"
End Sub
Макрос «Показать»:
Sub UH()
    ' Снятие защиты с листа
    Worksheets("JE").Unprotect Password:="ImportLCPA17"

    On Error GoTo ErrorHandler  ' Обработка ошибок

    Rows("6:447").Hidden = False

    ' Защита листа после выполнения макроса
    Worksheets("JE").Protect Password:="ImportLCPA17"
    Exit Sub

ErrorHandler:
    MsgBox "Произошла ошибка: " & Err.Description
    ' Защита листа в случае ошибки
    Worksheets("JE").Protect Password:="ImportLCPA17"
End Sub

Объяснение изменений:

  1. Снятие защиты: Этот код сначала снимает защиту с рабочего листа, что позволяет выполнять изменение свойств строк.

  2. Обработка ошибок: Важно учитывать возможность ошибок. Здесь используется On Error GoTo ErrorHandler, чтобы обеспечить корректное поведение даже в случае возникновения ошибок. Если возникнет ошибка, то будет показано сообщение об ошибке, и лист будет защищен.

  3. Защита листа: После выполнения всех необходимых действий документ снова защищается.

Заключение

С помощью предложенных изменении и подхода вы сможете успешным образом управлять видимостью строк на защищенном листе Excel. Это позволит вам работать более эффективно, сохраняя необходимые уровни безопасности данных и возможности настройки интерфейса пользователя.

Если у вас возникнут дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...