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

时间:2013-11-04 02:38:02

标签: excel vba excel-vba

有没有办法在开始时取消保护工作簿,运行所有workbook_open()宏,然后重新保护工作簿,以便普通用户无法更改任何工作表上的任何内容?我想阻止普通用户更改任何内容,但允许宏进行自动更新和计算。

有什么建议吗?这甚至可行吗?

2 个答案:

答案 0 :(得分:2)

我认为您正在寻找的是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方法有个可选参数,但我没有介绍,但您可以找到详尽的列表{{3} }

编辑: here.有关Unprotect方法的更多信息。

答案 1 :(得分:1)

是的,可以做到

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在您的工作表的任何部分上执行操作,而普通用户只能与“未锁定”的单元格进行交互。