Вы можете изменить лист с помощью кода, выполнив эти действия
- Unprotect
- Изменение
- Защита
В коде это будет:
Sub UnProtect_Modify_Protect()
ThisWorkbook.Worksheets("Sheet1").Unprotect Password:="Password"
'Unprotect
ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Changed"
'Modify
ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password"
'Protect
End Sub
Слабость этого метода заключается в том, что если код прерывается и обработка ошибок не захватывает его, рабочий лист можно оставить в незащищенном состоянии.
Код можно улучшить , выполнив эти действия
Код для этого будет:
Sub Re-Protect_Modify()
ThisWorkbook.Worksheets("Sheet1").Protect Password:="Password", _
UserInterfaceOnly:=True
'Protect, even if already protected
ThisWorkbook.ActiveSheet.Range("A1").FormulaR1C1 = "Changed"
'Modify
End Sub
Этот код обновляет защиту на листе, но с параметром UserInterfaceOnly, установленным в значение true. Это позволяет коду VBA изменять рабочий лист, сохраняя при этом рабочий лист защищенным от пользовательского ввода через пользовательский интерфейс, даже если выполнение прерывается.
Этот параметр потерян при закрытии и повторном открытии книги. Защита листа все еще поддерживается.
Таким образом, код «Повторная защита» должен быть включен в начале любой процедуры, которая пытается изменить лист, или может быть запущен один раз при открытии книги.