Excel - VBA对特定工作表应用特定/粒度保护?

时间:2018-05-08 23:57:05

标签: excel vba excel-vba protection

我试图找到一个相当庞大而棘手的工作簿,而我似乎并没有将所有工具正确地放在一起。

我在这里以及其他网站上看到了很多示例,这些示例将运行所有工作表名称的循环并应用保护。我的怪癖是我有不同的保护选项,我想在每个不同的工作表上启用或禁用。目前我正在与:摔跤:

Private Sub Workbook_Open()

'For each Worksheet:
Sheets(Sheet1).Protect Password:="superpassword", UserInterFaceOnly:=True, Contents:=True, AllowFormattingCells:=True, _
    AllowFormattingColumns:=True, AllowFormattingRows:=True, AllowInsertingColumns:=False, AllowInsertingRows:=False, _
    AllowInsertingHyperlinks:=False, AllowDeletingColumns:=False, AllowDeletingRows:=False, AllowSorting:=False, _
    AllowFiltering:=False, AllowUsingPivotTables:=False, DrawingObjects:=False, Scenarios:=False

Sheets(Sheet2).Protect Password:="superpassword", UserInterFaceOnly:=True,  Contents:=True, AllowFormattingCells:=True, _
    AllowFormattingColumns:=True, AllowFormattingRows:=False, AllowInsertingColumns:=False, AllowInsertingRows:=True, _
    AllowInsertingHyperlinks:=False, AllowDeletingColumns:=False, AllowDeletingRows:=False, AllowSorting:=False, _
    AllowFiltering:=False, AllowUsingPivotTables:=True, DrawingObjects:=False, Scenarios:=False 

‘and so on… for other sheets

End Sub

但是,无论我是否尝试Sheets()或Worksheets(),我都会遇到老鼠的错误。只是不能让它循环。

我已经看过将UserInterfaceOnly应用到后台整张工作表的示例,所以我意识到我可以将它修剪一点。

应该有一个快速/简短的方法来回调这个子并在工作表关闭时重新应用这些保护,是吗?

提前感谢您的任何帮助。我意识到这一点很多,但是在配置工作簿的其他区域的过程中,我已经对这个问题进行了长达数周的反击,感觉就像我的大脑在这一点上是Excel一样。

1 个答案:

答案 0 :(得分:-1)

在一天结束时,你不会有一个完美的解决方案。表格上的VBA保护不会阻止恶意用户访问您存储的任何内容。通过他们拥有的保护措施来蛮力很容易。

假设您对上述内容感到满意并且只是试图阻止(但不能阻止)用户访问您的工作表,我首先会设置一个变体。您的循环会将该变量分配给工作簿中的每个工作表对象,并使用您的语句保护它们。

dim sht as WorkSheet
for each sht in ThisWorkbook.Sheets
    sht.protect {args go here...}
next sht