我试图找到一个相当庞大而棘手的工作簿,而我似乎并没有将所有工具正确地放在一起。
我在这里以及其他网站上看到了很多示例,这些示例将运行所有工作表名称的循环并应用保护。我的怪癖是我有不同的保护选项,我想在每个不同的工作表上启用或禁用。目前我正在与:摔跤:
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一样。
答案 0 :(得分:-1)
在一天结束时,你不会有一个完美的解决方案。表格上的VBA保护不会阻止恶意用户访问您存储的任何内容。通过他们拥有的保护措施来蛮力很容易。
假设您对上述内容感到满意并且只是试图阻止(但不能阻止)用户访问您的工作表,我首先会设置一个变体。您的循环会将该变量分配给工作簿中的每个工作表对象,并使用您的语句保护它们。
dim sht as WorkSheet
for each sht in ThisWorkbook.Sheets
sht.protect {args go here...}
next sht