0

我正在使用以下链接:

http://www.ozgrid.com/Excel/run-macro-on-time.htm

存储我调用函数的时间,ontime然后取消它。但是,在我最后一次存储之后,我调用ontime()然后我的函数关闭。问题是我刚刚存储的时间超出范围并更改为空。所以使用上面的链接,我说一旦RunOnTime()完成,dTime 的值就是空的,因此当我调用CancelOnTime()它时它不起作用。我在示例中声明了 dTime。一切都一样,除了我在 ThisWorkbook 中。

任何人都可以建议吗?

4

2 回答 2

2

您无法在发布的 ThisWorkbook 模块中运行该代码。ThisWorkbook 是一个类模块,默认情况下,其中的过程在类之外不可用。首先,您需要将 OnTime 调用的任何过程公开,以便可以从类外部访问它(OnTime 存在于类外部)。接下来,对过程的任何引用都需要以类名开头。通过这两项更改,您的代码将如下所示:

Public dTime As Date
Dim lNum As Long

Public Sub RunOnTime()
    dTime = Now + TimeSerial(0, 0, 10)
    Application.OnTime dTime, "ThisWorkbook.RunOnTime"

    lNum = lNum + 1
    If lNum = 3 Then
       CancelOnTime
    Else
        MsgBox lNum
    End If

End Sub

Sub CancelOnTime()
    Application.OnTime dTime, "ThisWorkbook.RunOnTime", , False
End Sub
于 2013-04-02T13:15:33.510 回答
1

在示例中,变量dTime被声明为Public。事实上,它不需要是因为只RunOnTime()访问它,但是能够使用您编写的函数访问它是有用的。CancelOnTime()不依赖于变量。

我认为您可能对 Watch 感到困惑。要查看公共变量,请将上下文设置为 All Procedures - All Modules。

于 2013-04-02T09:55:50.167 回答