有没有办法在打开开始时首先取消保护工作簿,运行所有workbook_open()
宏,然后重新保护工作簿,以便普通用户无法更改任何工作表上的任何内容?我想阻止普通用户更改任何内容,但允许宏进行自动更新和计算。
有什么建议么?这甚至可行吗?
我认为您正在寻找的是Worksheet.Protect
方法。
在Workbook_Open
活动开始时,放置以下代码:
ThisWorkbook.Sheets("SheetYouWantToUnprotect").Unprotect _ Password:="TheSheetPassword"
然后在事件代码的末尾Workbook_Open
,您想再次保护工作表,因此放置以下代码:
ThisWorkbook.Sheets("SheetYouWantToProtect").Protect _
Password:="SheetPassword"
当然,如果需要多张纸不受保护,您可以使用多张纸来执行此操作。如果每张工作表都有相同的密码,请在事件的开头放置一个简单的循环Open
:
Dim sht as Worksheet
For Each sht in Thisworkbook.Sheets
sht.Unprotect Password:="YourPassword"
Next sht
在代码的末尾,您可以使用相同的循环来保护工作表,只需更改.Unprotect
为.Protect
.
或者,如果有许多不同的密码(除了建议您将它们全部更改为一个密码),您可以放置我提到的第一行代码的尽可能多的实例,以解除对必要工作表的保护。
注意:该方法还有更多可选参数.Protect
,我没有介绍,但您可以在此处找到详尽的列表。
编辑: 这是Unprotect
有关该方法的更多信息。
是的,可以做到
Private Sub Workbook_Open()
Dim WS As Worksheet
For Each WS In ThisWorkbook.Sheets
WS.Unprotect Password:="YourPassword"
WS.Protect Password:="YourPassword", UserInterfaceOnly:=True
Next WS
End Sub
这UserInterfaceOnly:=True
允许 VBA 对工作表的任何部分进行操作,而普通用户只能与“解锁”单元格进行交互。