Excel VBA受信任与不受信任工作簿事件顺序差异探究
Excel受信任/不受信任环境下工作簿事件触发差异探究
实验设置
- 在
ThisWorkbook模块编写Workbook_Open、Workbook_Activate等事件的日志记录代码 - 通过
MLogging模块实现日志文件的写入功能 - 创建两个内容一致的
.xlsm工作簿,仅日志标识不同,用于区分不同环境下的日志输出
实验流程
- 将其中一个工作簿所在文件夹设置为受信任位置,另一个设置为非受信任位置
- 分别执行打开工作簿、切换窗口焦点、关闭工作簿的操作
- 同步记录两个环境下的事件日志,生成
Events - Trusted.log和Events - Untrusted.log
实验发现
- 受信任工作簿打开时,会触发
Workbook_WindowActivate事件;不受信任工作簿打开时,该事件不触发 - 打开第二个工作簿时:
- 受信任环境:现有工作簿的
Workbook_WindowDeactivate、Workbook_Deactivate事件,在新工作簿的Workbook_Open事件之后触发 - 不受信任环境:现有工作簿的上述两个事件,在新工作簿的
Workbook_Open事件之前触发
- 受信任环境:现有工作簿的
- 补充捕获应用级事件后发现:不受信任工作簿启用宏后,
Application_WorkbookOpen、Application_WorkbookActivate事件会重复触发,但始终缺少Workbook_WindowActivate及对应的应用级Application_WindowActivate事件
技术疑问
- 受信任与不受信任工作簿的事件触发逻辑、顺序为何存在差异?
- 不受信任工作簿打开时,为何不会触发
Workbook_WindowActivate事件? - 打开新工作簿时,两类环境下事件触发顺序相反的底层原因是什么?
- 是否有办法确保事件触发顺序不受信任状态影响,让新工作簿的
Workbook_Open事件始终在当前工作簿的Workbook_Deactivate事件之后执行? - 有没有保存与恢复Excel UI设置的标准规范?
- 不受信任工作簿启用宏后,在
Application_WorkbookActivate事件触发完成后,为何不会触发Workbook_WindowActivate和Application_WindowActivate事件?
内容的提问来源于stack exchange,提问作者SLax
相关产品推荐
相关产品推荐

