在VBA中为受保护的Excel工作表指定用户权限

时间:2016-02-06 02:02:22

标签: excel vba excel-vba

我正在使用电子表格,为了数据完整性,在分发之前需要对其进行保护。我编写了一个基于下拉列表选择自动填充列的函数。我不希望用户编辑此列,因此我对其进行了保护,但为了自动填充我的流程,请取消保护并重新保护电子表格。这就是问题所在。

我希望用户拥有所有其他权限(例如格式化,行插入,行删除等)。但是,当进程重新保护工作表时,将撤消所有权限。

有没有办法可以锁定工作表并指定我想在VBA中授予哪些用户权限?

1 个答案:

答案 0 :(得分:3)

Worksheet.Protect method允许指定执行查看►更改►保护工作表命令时可用的所有内容。这些参数在很大程度上是可选的,因此需要明确指定它们,或者使用逗号作为占位符传递空白参数。

使用密码保护工作表并允许列格式化和行插入:

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过程中获得更多自由,而无需不断地取消保护和重新保护工作表。