簡體   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