excel - 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
推荐阅读
- vue.js - 将图像添加到 Vue Select 下拉菜单?
- docker - 仅将 Docker Swarm Manager 节点公开到 Internet。隐藏工作人员(无公共 IP)
- javascript - 在 Electron 的渲染器中导出/定义函数的正确方法
- flutter - 使 BLoC 状态持久化,以便使用 Flutter 制作离线应用程序
- angular - Angular 7,命名路由器插座在延迟加载的模块中不起作用
- java - 转换列表
> 流式传输 - java - 如何解决:“StepsCode 类型的层次结构不一致”问题
- javascript - 引导多选不是一个功能 - 不检查多选脚本
- java - 如何通过 Jenkins 定位特定的 Cucumber 功能文件(自动化测试)?
- actionscript-3 - 在 Adobe AIR windows 应用程序中调整舞台大小