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文件在打开或关闭时自动运行此代码时,它不会这样做。

你知道是什么原因造成的吗?

由于某种原因,在受保护的工作簿上运行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中,当您打开或关闭工作簿时,或者当您执行应导致子例程运行的操作时,它可能无法正常工作。

MS主题讨论-代码"背后";工作簿

相关内容

最新更新