簡體   English   中英

Workbook_Open() 不適用於工作簿保護

[英]Workbook_Open() does not work with Workbook Protection

我正在使用 Excel 2016 並將此代碼寫入 VBA 中的 ThisWorkbook object:

Private Sub Workbook_Open()
ThisWorkbook.Protect (password = "password")
End Sub

它不工作。 這里的要點是,這應該可以防止用戶接觸本工作簿中的 Power Query 函數。 我已將其保存為啟用宏的工作簿,我啟用了所有宏和事件,這是唯一打開的工作簿。

我還有這個附加代碼:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ThisWorkbook.Protect (password = "password")
ThisWorkbook.Save
End Sub

那也行不通。 如果我將該“ThisWorkbook.Protect”代碼插入通用模塊或工作表 object 並手動運行它,它工作正常,但是當我希望這個特定的 excel 文件在打開或關閉時自動運行此代碼時,它不會這樣做。

任何想法可能是什么原因造成的?

出於某種原因,在受保護的工作簿上運行ThisWorkbook.Protect似乎取消了它的保護(即使我找不到任何說明它這樣做的文檔)所以試試這個:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Not ThisWorkbook.ProtectStructure Then ThisWorkbook.Protect Password:="password"
    ThisWorkbook.Save
End Sub

為了使自動運行的子例程在 Microsoft Excel 中正常工作,它們必須包含在 Visual Basic 模塊中。

如果 Auto_Open、Auto_Close 或其他自動運行的子例程存儲在工作表或 ThisWorkbook“后面”,則當您打開或關閉工作簿時,或者當您執行應導致子例程運行的操作時,它可能無法正確 function 。

https://support.microsoft.com/en-us/topic/vba-code-behind-a-worksheet-or-a-workbook-may-not-work-in-excel-f2de64d3-a926-7035-e18e- 1697f0a32bc5#:~:text=In%20order%20for%20automatically%2Drunning%20subroutines%20to%20work%20correctly%20in%20Microsoft%20Excel%2C%20they%20must%20be%20contained%20within%20a%20Visual%20Basic%20module .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM