Excel VBA Макросы: Защита листа от пользователя, но не от макроса.

Автор Крис, 08 мая 2019, 14:23

Крис

Прошу помочь с написанием макроса.
Первый макрос необходим для защита листа полностью, а второй макрос для скрытия или открытия строк.
Второй макрос без защиты работает хорошо, но когда ставлю защиту, то второй макрос выдает ошибку "Run-time error 1004".
Подскажите, как нужно доработать второй макрос.

Макрос 1:
Private Sub Auto_Open()
ActiveSheet.Protect Password:="1234"
End Sub

Макрос 2
Private Sub Worksheet_Activate()
    Application.ScreenUpdating = False
    Rows("28:44").EntireRow.Hidden = False
    For Each c In Range("W28:W44")
    If c = 0 Then
    c.EntireRow.Hidden = True
    End If
    Next
    Rows("45:49").EntireRow.Hidden = False
    For Each c In Range("D45:D49")
    If c = 0 Then
    c.EntireRow.Hidden = True
    End If
    Next
    Rows("51:54").EntireRow.Hidden = False
    For Each c In Range("AE51:AE54")
    If c = 0 Then
    c.EntireRow.Hidden = True
    End If
    Next
    Rows("84:86").EntireRow.Hidden = False
    For Each c In Range("B84:B86")
    If c = " " Then
    c.EntireRow.Hidden = True
    End If
    Next
    Application.ScreenUpdating = True
End Sub
[свернуть]

Администратор

Может быть так решится проблема. У метода "Protect" есть возможность ставить защиту только от юзера, а макрос может работать с листом. Но нужно учитывать, что в таком режиме не все действия можно сделать. Какие действия нельзя сделать, нужно смотреть опытным путём.
Если для ваших действий этого недостаточно, то тогда макрос в начале своей работы должен снять защиту листа, а после действий снова установить.

Private Sub Workbook_Open()
    ActiveSheet.Protect Password:="1234", UserInterfaceOnly:=True
End Sub


Примечание

Событие "Auto_Open" старое и кажется сейчас не используется, вместо него используется "Workbook_Open", которое нужно поместить в модуль книги.