2016-02-06 2 views
1

Я работаю с электронной таблицей, которая должна быть защищена перед распространением исключительно для целостности данных. Я написал функцию, которая автоматически заполняет столбец на основе выбора выпадающего списка. Я не хочу, чтобы пользователь редактировал этот столбец, поэтому я его защитил, однако, чтобы автоматически заполнить мой процесс, он не защищает и повторно защищает электронную таблицу. В этом и заключается проблема.Задание прав пользователя в VBA для защищенного листа Excel

Я хотел бы, чтобы у пользователей были все другие разрешения (например, форматирование, вставка строк, удаление строк и т. Д.). Однако, когда процесс повторно защищает лист, все разрешения аннулируются.

Есть ли способ заблокировать лист и указать, какие разрешения пользователя я хотел бы предоставить в VBA?

ответ

3

Worksheet.Protect method позволяет указать все, что было бы доступно вам при выполнении обзора ► Изменения ► Команда Protect Worksheet. Параметры в основном необязательны, поэтому их нужно указывать явно или пустые параметры могут быть переданы запятыми в качестве заполнителей.

Для защиты рабочего листа с помощью пароля и позволяет столбец форматирования и строке вставки:

With Worksheets("Sheet One") 
    .Protect Password:="myPassword", Contents:=True, _ 
      AllowFormattingColumns:=True, AllowInsertingRows:=True 
    'insert a row 
    .Rows("9:9").EntireRow.Insert CopyOrigin:=xlFormatFromLeftOrAbove 
End With 

Смотрите Worksheet.Protect method для полного списка доступных опций.

Другой вариант - UserInterfaceOnly. Это останавливает пользователя от предопределенных действий на листе, но позволяет процедурам VBA выполнять действия, которые в противном случае были бы ограничены.

With Worksheets("Sheet One") 
    .Protect Password:="myPassword", UserInterfaceOnly:=True, Contents:=True, _ 
       AllowFormattingColumns:=True, AllowInsertingRows:=True 
    'insert a column; the user cannot do this 
    .Columns(2).EntireColumn.Insert CopyOrigin:=xlFormatFromLeftOrAbove 
End With 

Это последнее поведение позволит вам больше свободы в своих процедурах VBA без необходимости постоянно и снятия защиты reprotect листа.