Защита ячеек в Excel, но возможность их изменения сценарием VBA

Вы можете изменить лист с vba помощью кода, выполнив следующие visual-basic-applications действия

  • Снять защиту
  • Изменить
  • Защитить

В коде это будет:

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

слабость этого visual-basic-applications метода заключается в том, что vba если код прерывается и обработка visual-basic-applications ошибок не фиксирует его, рабочий excel-macro лист может остаться в незащищенном vba состоянии.

Код можно улучшить с помощью macros-vba этих действий

  • Повторная защита
  • Изменить

Код для этого:

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

Этот workbook код обновляет защиту на рабочем vba-macros листе, но с параметром «UserInterfaceOnly», установленным macros-vba в значение true. Это позволяет visual-basic-applications коду VBA изменять лист, сохраняя workbook при этом лист защищенным vba от пользовательского ввода excel через пользовательский интерфейс, даже excel-macro если выполнение прерывается.

Этот ms-excel параметр теряется при закрытии и vba повторном открытии рабочей macros-vba книги. Защита рабочего листа workbook сохраняется.

Таким образом, код vba-macros «Повторная защита» должен macros-vba быть включен в начале любой excel-macro процедуры, которая пытается excel-macro изменить рабочий лист, или macros-vba может быть запущен только ms-excel один раз при открытии рабочей ms-excel книги.

vba

excel

2022-10-24T07:14:50+00:00