首页 > 解决方案 > Workbook_Open() 不适用于工作簿保护

问题描述

我正在使用 Excel 2016 并将此代码写入 VBA 中的 ThisWorkbook 对象:

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”代码插入通用模块或工作表对象并手动运行它,它工作正常,但是当我希望这个特定的 excel 文件在打开或关闭时自动运行此代码时,它不会这样做。

有什么想法可能导致这种情况吗?

标签: excelvbaautomationpassword-protectionexcel-2016

解决方案


由于某种原因,ThisWorkbook.Protect在受保护的工作簿上运行似乎取消了它的保护(即使我找不到任何说明它这样做的文档)所以试试这个:

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

推荐阅读