繁体   English   中英

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

[英]How do you run macros upon opening Excel workbook, then re-protect after finished running?

有没有一种方法,首先,在打开开始时取消保护工作簿,运行所有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在您的工作表的任何部分上起作用,而普通用户只能与“未锁定”的单元进行交互。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM