excel - 如何通过 Workbook.Close 语句触发 OnTime 事件?
问题描述
看来,如果 OnTime 事件由程序化 MyBook.Close 语句注册,则 OnTime 永远不会运行。
此代码工作正常:
Sub TestOnTime()
Application.OnTime Now + TimeValue("00:00:05"), "MySub"
End Sub
Sub MySub()
Debug.Print "hello"
End Sub
运行 TestOnTime。MySub 将按预期执行。
这段代码运行良好:
本工作簿:
Dim WithEvents oApp As Application
Private Sub Workbook_Open()
Set oApp = Application
End Sub
Private Sub oApp_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
Application.OnTime Now + TimeValue("00:00:05"), "MySub"
End Sub
模块一:
Sub MySub()
Debug.Print "hello"
End Sub
- 手动关闭另一个工作簿以触发 oApp_WorkbookBeforeClose。
- MySub 按预期执行。
但是这段代码失败了。OnTime 事件永远不会运行。
第一册
本工作簿:
Dim WithEvents oApp As Application
Private Sub Workbook_Open()
Set oApp = Application
End Sub
Private Sub oApp_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean)
Application.OnTime Now + TimeValue("00:00:05"), "MySub"
End Sub
模块一:
Sub MySub()
Debug.Print "hello"
End Sub
书 2
模块一:
Sub Test()
ThisWorkbook.Close
End Sub
- 运行
Test
以关闭 Book 2。 - Book 1 oApp_WorkbookBeforeClose 按预期执行。
- 但是 Book 1 MySub 事件永远不会运行。
为什么?
如果通过 Workbook_BeforeClose 事件注册,为什么 OnTime 不执行?即将关闭的书中没有代码正在运行。OnTime 对其他事件没有问题(例如,以编程方式打开工作簿)。不知何故,以编程方式关闭工作簿会破坏 OnTime。为什么?
解决方案
由于第 2 册即将关闭,您应该在第 2 册中而不是在第 1 册中包含 Application.OnTime 过程
另外,我认为那些书应该保存一次,而不是新书。
Sub test()
Application.OnTime Now + TimeValue("00:00:05"), "Book 1.xlsm!MySub"
ThisWorkbook.Close
End Sub
编辑 7 月 6 日 -
您正在关闭工作簿,然后尝试MySub
在 5 秒后在同一工作簿中运行宏。关闭工作簿后,同一工作簿中的宏将不会运行。应用程序将重新打开文件以运行宏。如果您想在关闭 5 秒后关闭 Book2,Thisworkbook
那么 --
在本工作簿中
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnTime Now + TimeValue("00:00:05"), "Book2.xlsm!Test"
End Sub
因此,在关闭之后Thisworkbook
,Book2 中名为“Test”的宏将运行并关闭该工作簿。
推荐阅读
- unicode - 将源映射用于非 JS 语言时,源映射行/列定义中的任何细微之处
- google-analytics - 使用测量协议和非交互式时丢失大量事务
- python - 调试浮士德流处理 - 从主题开始重新启动应用程序
- tfs - 我如何列出我所有的评论或至少我工作过的 WI?
- go - 什么时候应该显式调用 os.File.Close()?
- flutter - 页面重建时颤振重建底部导航栏
- reactjs - 在 reactJS 中将值列表作为参数传递
- php - 编辑配置文件laravel 7未定义变量中的错误密码更改
- go - 如何为多个环境和突变的组合生成配置
- python - Django 在 Django 模板中访问列表元素的属性