如何在打开Excel工作簿时运行macros,然后在完成运行后重新保护?

是否有办法首先在开始时解除工作簿的保护,运行所有的workbook_open()macros,然后重新保护工作簿,以便普通用户不能在任何工作表上更改任何内容? 我想阻止普通用户改变任何东西,但允许macros进行自动更新和计算。

有什么build议么? 这是否可行?

我想你正在寻找的是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更改为.Unprotect

或者,如果有许多不同的密码(除了build议您将它们全部更改为一个密码),您可以放置​​我提到的第一行代码的多个实例,以取消保护必要的工作表。

注意: .Protect方法还有更多的可选参数,我没有介绍,但是你可以在这里find详尽的列表。

编辑: 这是更多关于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对工作表的任何部分进行操作,而普通用户只能与“解锁”单元交互。