首页 > 解决方案 > 如何停止 Application.ontime

问题描述

我试图在单击按钮 1 分钟后运行宏。当我再次按下按钮时,第一个计时器应该重置并从头开始(如果我在 1 分钟内再次单击按钮,宏不应该运行。它应该只在我最近一次点击的 1 分钟后运行)

我试过了application.ontime dtime,"expire", false,但它不起作用。当我尝试application.ontime dtime,"expire", , false时(导致错误 1004)

public dtime as double

private sub commandbutton1_click()
application.ontime dtime,"expire", false
dtime = Now+timevalue("00:01:00")
application.ontime dtime,"expire"
commandbutton2.visible= true

end sub

现在单击commandbutton1 1 分钟后,宏expire 正在运行(这是使commandbutton2 不可见)。但是当我在 1 分钟内再次按下命令按钮时(假设在第一次单击后 30 秒后),计时器继续运行并使命令按钮 2 在 30 秒内不可见。第二次点击时我需要计时器重置。或者请建议任何替代方法。希望我说清楚了。

标签: excelvba

解决方案


像这样的东西:

public dtime as double

private sub commandbutton1.click()
    'If there's an existing run, cancel it
    If dtime <> 0 then 
        on error resume next 'might already have run, so ignore any error
        application.ontime dtime, "expire", ,false
        on error goto 0      'stop ignoring errors
        dtime=0
    End If

    'schedule next run
    dtime = Now + timevalue("00:01:00")
    application.ontime dtime, "expire"
    commandbutton2.visible = true

end sub

推荐阅读