Excel VBA: блокировка ячеек без защиты книги - PullRequest
0 голосов
/ 24 октября 2018

Я создал надстройку, которая отправляет и извлекает данные из базы данных, чтобы эти данные могли использоваться нашими аналитиками.Чтобы предотвратить внесение изменений в существующие точки данных, я хочу заблокировать ячейки, содержащие эти данные.Первоначально я сделал это, заблокировав диапазон данных и защитив книгу, поскольку в противном случае блокировка не работает.Однако защита рабочей книги также удаляет / ограничивает множество функциональных возможностей для конечного пользователя, таких как создание графиков, функция автоматического заполнения, изменение формата и т. Д. Поскольку эти и другие функциональные возможности необходимы для конечного пользователя, я не могу защититьРабочая тетрадь.Тем не менее, я хочу заблокировать ячейку, содержащую точки данных.

Итак, мой вопрос: возможно ли заблокировать ячейки в динамическом диапазоне (у меня есть макросы, определяющие правильный конечный столбец и конечный ряд точек данных) без защиты рабочей книги?Если так, то как?Если нет, можно ли обнаружить изменения в динамическом диапазоне и показать окно сообщения, что изменения не разрешены в этой конкретной ячейке / диапазоне, и вернуться к старому значению ячейки?Если так, то как?

Я видел несколько постов, в которых был задан похожий вопрос, но на них либо не было ответа, либо ответ был неудовлетворительным для моего случая (например, макрос, реализованный в проекте VBA рабочей книги вместо проекта VBAнадстройка).

Заранее спасибо за ваш ответ (ы)!

С уважением, Роберт

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Используйте

ActiveSheet.Cells.Locked=False

Затем заблокируйте свой диапазон, который вы не хотите редактировать, используя:

Range("A1:A4").Cells.Locked=True

Затем защитите лист

ActiveSheet.Protect Contents:=True, DrawingObjects:=False

Это защитит только содержимое Locked и позволит вам изменять значения на остальной части листа и вставлять / удалять диаграммы.Возможно, вам придется изменить дополнительные настройки с защитой. Более подробную информацию можно найти здесь

0 голосов
/ 24 октября 2018

Вам не нужно защищать Workbook, только Worksheet.

Чтобы защитить / снять защиту листа с помощью VBA, используйте Worksheet-method protect resp.unprotect (вы можете применить пароль).

Чтобы предотвратить изменение диапазона, необходимо установить для его свойства locked значение True и защитить лист (все ячейки).имейте значение locked, установленное по умолчанию).

Имейте в виду, что если диапазон заблокирован, а рабочая таблица защищена, вы не можете изменять диапазон с помощью VBA.Если вы хотите сделать это, используйте метод unprotect в верхней части кода (но не забудьте снова защитить лист, когда закончите).В качестве альтернативы вы можете вызвать protect с параметром UserInterfaceOnly:=True, но, к сожалению, Excel не сохраняет это свойство.Поэтому, если вы сохраните файл Excel, в котором лист защищен с помощью UserInterfaceOnly:=True, и снова откроете его, лист будет защищен также для VBA.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...