VBA - 在继续执行下一个Sub之前等待一段时间

时间:2017-07-27 19:09:55

标签: excel vba excel-vba

所以我有一个Sub会运行另外两个宏,但是我需要它运行第一个然后等待1分钟再运行第二个

我在网上看过并收集了这个:

Sub MainExecute
stdB18
Application.Wait(Now + TimeValue(0:01:00"))
runB18
End Sub

问题在于,当我这样做时,它似乎不会等到stdB18运行之后,而是等待1分钟再运行任何东西。

我也尝试将wait放在runB18的顶部,但这会使整个应用程序在运行前等待。我有什么方法可以让它运行stdB18,然后等待1分钟,然后运行runB18

谢谢!

编辑:我需要等待的原因是因为我需要等待stdB18中刷新的QueryTable加载,然后才执行runB18我需要的for循环将提取数据从表中。

3 个答案:

答案 0 :(得分:6)

通常使用.Refresh来运行查询。只需添加BackgroundQuery:= False就可以使代码等到刷新查询表并且您不需要使用Application.Wait,因为您不知道查询需要多长时间才能完成

所以试试......

select foo.*
from (select t.*,
             row_number() over (partition by foo.category order by foo.category) as seqnum
      from foo join
           t
           on foo.category = t.category
     ) t
where seqnum <= t.cnt;

答案 1 :(得分:5)

您需要Application.OnTime

Sub MainExecute

  Application.OnTime Now() + TimeValue("0:01:00"), "runB18"
  stdB18

End Sub

答案 2 :(得分:1)

你告诉整个申请要等。相反,设置一个计时器以在一分钟后创建一个事件,然后创建一个例程来捕获此事件并运行第二个例程。