ThisWorkbook没有保存全局变量值来取消ontime()

时间:2013-04-02 09:44:26

标签: excel vba

我使用以下链接:

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

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

有人可以提供建议吗?

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

我想你可能会把自己与Watch混淆。要查看公共变量,请将上下文设置为“所有过程 - 所有模块”。