是否有辦法先在開始時解除工作簿的保護,運行所有的workbook_open()
宏,然後重新保護工作簿,以便普通用戶不能在任何工作表上更改任何內容?我想阻止普通用戶更改任何內容,但允許宏執行自動更新和計算。如何在打開Excel工作簿時運行宏,然後在完成運行後重新保護?
有什麼建議嗎?這是否可行?
是否有辦法先在開始時解除工作簿的保護,運行所有的workbook_open()
宏,然後重新保護工作簿,以便普通用戶不能在任何工作表上更改任何內容?我想阻止普通用戶更改任何內容,但允許宏執行自動更新和計算。如何在打開Excel工作簿時運行宏,然後在完成運行後重新保護?
有什麼建議嗎?這是否可行?
我認爲你正在尋找的是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
方法,我沒有涵蓋,但你可以找到一個詳盡的清單here.
編輯:在Unprotect
方法Here's更多信息。
是的,這是可以做到
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作用於工作表中的任意部分,而普通用戶只能用「解鎖」細胞相互作用。
看看是否有幫助:http://stackoverflow.com/questions/16174469/unprotect-vbproject-from-vb-code – Raptor
Workbook_Open事件處理起來很棘手,尤其是對於多個實例。我已經看到他們搞砸了我的工作的一兩次。我不是排隊打開事件,而是使用第一個「Open」事件,並將所有其他事件放入「Worksheet_Activate」事件中。這可以爲你工作嗎? – Manhattan
確保你的'Private Sub Workbook_Open()'在'ThisWorkBook'對象中。所有的程序都可以存儲在一個常規模塊中(只要不是'Private Sub')。也可以使用'ThisWorkbook'而不是'ActiveWorkbook',避免在你的代碼中使用'Active ...'/'.Activate' /'.Select'選項。我也會創建'Unprotect','ReProtect'。 – PatricK