微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何通过 Workbook.Close 语句触发 OnTime 事件?

如何解决如何通过 Workbook.Close 语句触发 OnTime 事件?

看来,如果 OnTime 事件是由 MyBook.Close 编程语句注册的,则 OnTime 永远不会运行。

代码工作正常:

package com.example.tester

class why {
   companion object { 
     fun test() {
        var i = 0;
      }
   }
}

运行 TestOnTime。 MySub 将按预期执行。


这段代码运行良好:

本工作簿:

Sub TestOnTime()
          Application.OnTime Now + TimeValue("00:00:05"),"MySub"
End Sub


Sub MySub()
          Debug.Print "hello"
End Sub

模块 1:

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
  1. 手动关闭一个工作簿以触发 oApp_WorkbookBeforeClose。
  2. MySub 按预期执行。

但是这段代码失败了。 OnTime 事件从不运行。

第一册

本工作簿:

Sub MySub()
          Debug.Print "hello"
End Sub

模块 1:

Dim WithEvents oApp As Application


Private Sub Workbook_open()
          Set oApp = Application
End Sub


Private Sub oApp_WorkbookBeforeClose(ByVal Wb As Workbook,"MySub"
End Sub

第二册

模块 1:

Sub MySub()
          Debug.Print "hello"
End Sub
  1. 运行 Sub test() ThisWorkbook.Close End Sub 关闭第 2 册。
  2. 预订 1 oApp_WorkbookBeforeClose 按预期执行。
  3. 但 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 日 -

您正在关闭工作簿,然后在 5 秒后尝试在同一工作簿中运行宏 MySub。一旦书关闭,同一工作簿中的宏将不会运行。应用程序将重新打开文件以运行宏。如果您想在关闭 Thisworkbook 5 秒后关闭 Book2 则 --

在本工作簿中

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.OnTime Now + TimeValue("00:00:05"),"Book2.xlsm!Test"
End Sub

因此,在关闭 Thisworkbook 后,Book2 中名为“Test”的宏将运行并关闭该工作簿。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?