Excel VBA: защита листа не работает по желанию

Вопрос:

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

ActiveSheet.Protect Password:="SomePassword", _
AllowInsertingColumns:=False, AllowInsertingRows:=False, _
AllowDeletingColumns:=False, AllowDeletingRows:=False, Contents:=False

Но это не работает, как я ожидаю. Я все еще могу вставлять и удалять строки и столбцы.

Что мне не хватает? Каков правильный способ достижения вышеуказанного?

Ответ №1

Я нашел ответ после немного большего количества экспериментов. Здесь код:

ActiveSheet.Cells.Locked = False
ActiveSheet.Protect Password:="SomePassword"

Это устанавливает свойство “Заблокировано” для всех ячеек на листе “False”, а затем полностью защищает лист. Причина, по которой он работает, заключается в том, что защита отключает редактирование только для тех ячеек, у которых “Locked” установлен на “True”.

Ответ №2

Насколько я могу судить, вам нужно Contents:=True, чтобы все остальное работало! Конечно, это противоречит вашей потребности в том, чтобы пользователи могли редактировать содержимое ячеек… заблокированных ячеек, то есть. Поэтому перед защитой листа просто откройте все свои ячейки (Format | Protection | снимите флажок Locked tickbox).

Ответ №3

Похоже, что AllowInsertingRows и т.д. являются параметрами, доступными только в том случае, если вы заблокируете содержимое с помощью содержимого: = True. Это не указано в справочной информации.

Поскольку вы хотите, чтобы содержимое было редактируемым, вам нужно пометить все ячейки, которые вы хотите редактировать, как разблокированные (установите для ячейки или свойства диапазона Locked значение false). Затем используйте Protect with Contents: = True.

Оцените статью
TechArks.Ru
Добавить комментарий