Excel 2007 VBA要暂停宏

时间:2016-10-28 13:36:49

标签: excel-vba loops macros vba excel

我目前有一个宏到达目录并将一些数据提取到我的电子表格中。最初我只有一个按钮来显示信息,一个按钮可以删除所有内容,但需要更改,我现在需要它自动运行宏来清除现有数据,然后每小时左右提取新数据。

通过不同的方式查看我可能会暂停宏的方法似乎是循环是最适合我的方式,因为它可以让我在等待运行时仍然与电子表格进行交互。

所有这一切都说,这就是我现在所拥有的,它似乎只是简单地遍历所有内容而根本没有暂停。

在宏的末尾,我使用以下

Call DelayOneHour 
Call RepActiveTicketsDelete 
Call DelayTwoSeconds
Call RepActiveTicketsDataGrab

这是循环

Sub DelayOneHour()

    Dim NowTick As Long
    Dim EndTick As Long

    NowTick = Now
    EndTick = Now + TimeValue("0:01:00")

    Do Until NowTick >= EndTick
        DoEvents
        NowTick = Now()
    Loop

End Sub

Sub DelayTwoSeconds()

    Dim NowTick As Long
    Dim EndTick As Long

    NowTick = Now
    EndTick = Now + TimeValue("0:01:00")

    Do Until NowTick >= EndTick
        DoEvents
        NowTick = Now()
    Loop

End Sub

感谢您的期待!

1 个答案:

答案 0 :(得分:2)

我认为Application.OnTime是一种有效安排程序以便稍后运行的方法。这释放了运行时环境(即,您可以在介入的1小时内运行其他工作簿中的其他宏等)。

而不是:

Call DelayOneHour 
Call RepActiveTicketsDelete 
Call DelayTwoSeconds
Call RepActiveTicketsDataGrab

这样做:

'Run the specified procedure in one hour:
Application.OnTime Now + TimeValue("00:60:00"), "RepActiveTicketsDelete"
Exit Sub

然后,在RepActiveTicketsDelete程序结束时,您安排了RepActiveTicketsDataGrab程序:

'Run the specified procedure in two seconds:
Application.OnTime Now + TimeValue("00:00:02"), "RepActiveTicketsDataGrab"
Exit Sub