Этот код должен работать.Когда вы говорите, что это не работает, вы получаете какую-то ошибку или все выполняется, но вы просто не видите ожидаемого изменения?Кроме того, гораздо более простой способ сделать это - использовать userinterfaceonly:=True
, когда вы защищаете лист.Если вы используете это, то листы блокируются только для пользователей, а не для кода VBA.Таким образом, вам не нужно разблокировать листы каждый раз, когда вам нужен код для выполнения.Я всегда использую этот макрос для всех своих моделей:
'UserInterfaceOnly locks edits from user but allows VBA to edit (no need to unlock/lock before/after macros)
'This setting is kept in memory, so it must be applied on Open Workbook Event
Sub Lock_Model(wb As Workbook, Optional strFunction As String = "Lock")
Dim varSheets As Variant
varSheets = Array("sheet1", "sheet2") ' list all the sheets you want to lock
'Lock/Unlock specified sheets in model
If strFunction = "Lock" Then
For i = LBound(varSheets) To UBound(varSheets)
wb.Sheets(varSheets(i)).Protect Password:="Password", AllowFormattingColumns:=True, AllowFormattingRows:=True, UserInterfaceOnly:=True
Next i
Else
For i = LBound(varSheets) To UBound(varSheets)
wb.Sheets(varSheets(i)).Unprotect Password:="Password"
Next i
End If
End Sub
Если вам не нравится этот подход, укажите, что именно происходит при запуске кода.