VBA: защита только объектов формы

Я прочитал довольно много сообщений, но не нашел ничего похожего на то, что я пытаюсь достичь. У меня в основном есть несколько объектов Shape на моем листе, которым назначены макросы. Я хотел бы защитить эти объекты с помощью VBA, чтобы пользователи могли взаимодействовать с ними, но не редактировать их каким-либо образом. Однако я хотел бы, чтобы пользователи (и мой VBA) могли свободно манипулировать остальной частью книги по своему усмотрению.

Я пробовал ActiveSheet.Protect DrawingObjects:=True, но проблема в том, что удобство использования остальной части приложения также весьма ограничено. Например, у меня есть флажок, который скрывает/отображает диапазон ячеек, но когда лист защищен, я не могу выполнить макрос и получаю исключение. Есть ли способ защитить только объекты Shape и в основном оставить остальную часть книги без ограничений, как если бы лист был незащищенным?

Спасибо, Димитар

Пробовали ли вы запускать защиту через просмотр, а не программно? Он дает вам список опций - проверьте формы

Selkie 28.05.2019 19:45
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
0
1
1 684
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В разделе «Просмотр» -> «Защитить лист» -> Вы хотите, чтобы все, кроме «Редактировать объекты», было проверено (чтобы пользователи все еще могли делать все), затем создайте пароль. Это позволяет людям делать все, кроме редактирования объектов, которыми являются формы 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

Другие вопросы по теме