Я прочитал довольно много сообщений, но не нашел ничего похожего на то, что я пытаюсь достичь. У меня в основном есть несколько объектов Shape
на моем листе, которым назначены макросы. Я хотел бы защитить эти объекты с помощью VBA, чтобы пользователи могли взаимодействовать с ними, но не редактировать их каким-либо образом. Однако я хотел бы, чтобы пользователи (и мой VBA) могли свободно манипулировать остальной частью книги по своему усмотрению.
Я пробовал ActiveSheet.Protect DrawingObjects:=True
, но проблема в том, что удобство использования остальной части приложения также весьма ограничено. Например, у меня есть флажок, который скрывает/отображает диапазон ячеек, но когда лист защищен, я не могу выполнить макрос и получаю исключение. Есть ли способ защитить только объекты Shape
и в основном оставить остальную часть книги без ограничений, как если бы лист был незащищенным?
Спасибо, Димитар
В разделе «Просмотр» -> «Защитить лист» -> Вы хотите, чтобы все, кроме «Редактировать объекты», было проверено (чтобы пользователи все еще могли делать все), затем создайте пароль. Это позволяет людям делать все, кроме редактирования объектов, которыми являются формы IIRC.
Если вам не терпится сделать это с помощью VBA, вы можете быстро записать макрос с похожей блокировкой, посмотреть, как он выглядит, и отредактировать оттуда.
Редактировать: я только что понял, что есть другие объекты, которые вы пытаетесь разрешить. В этом случае я бы рассмотрел событие изменения, и когда одна из фигур, которые вы пытаетесь защитить, изменяется, нажмите «Отменить».
Если вы опустите другие параметры, вы получите их значения по умолчанию. Вместо этого сделайте что-то вроде этого:
ActiveSheet.Protect DrawingObjects:=True, _
Contents:=False, _
Scenarios:=False, _
UserInterfaceOnly:=False, _
AllowFormattingCells:=True, _
AllowFormattingColumns:=True, _
AllowFormattingRows:=True, _
AllowInsertingColumns:=True, _
AllowInsertingRows:=True, _
AllowInsertingHyperlinks:=True, _
AllowDeletingColumns:=True, _
AllowDeletingRows:=True, _
AllowSorting:=True, _
AllowFiltering:=True, _
AllowUsingPivotTables:=True
Пробовали ли вы запускать защиту через просмотр, а не программно? Он дает вам список опций - проверьте формы