脚本期间延迟活动 - vba

时间:2017-09-05 15:54:49

标签: excel vba

运行以下查询以从蒸汽图中获取一些数据:

With ActiveSheet.QueryTables.Add(Connection:= _
    "URL;http://steamcharts.com/app/" & games(x), Destination:=Range("A" & lastRowData))
    .Name = " & games(x) & "
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .PreserveFormatting = True
    .RefreshOnFileOpen = False
    .BackgroundQuery = True
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = True
    .RefreshPeriod = 0
    .WebSelectionType = xlAllTables
    .WebFormatting = xlWebFormattingNone
    .WebPreFormattedTextToColumns = True
    .WebConsecutiveDelimitersAsOne = True
    .WebSingleBlockTextImport = False
    .WebDisableDateRecognition = False
    .WebDisableRedirections = False
    .Refresh BackgroundQuery:=True
End With

然后我有其他行动,比如

//Run analysis

我遇到的问题是,当脚本正确执行时,"分析"部分运行但没有按预期工作,因为在查询加载时,这可能需要5秒钟,并且脚本立即执行,而不是在工作之前等待先前的数据加载。有没有办法延迟后续脚本命令的执行,直到所有数据都加载到电子表格中?

3 个答案:

答案 0 :(得分:1)

有趣的是,对于这个问题,答案非常简单。为了澄清,我使用了DoEvents和类似Application.Wait Now + #12:00:12 AM#之类的东西(等待查询运行和加载的时间足够长)。但是,即使使用这两种方法,由于某些原因,似乎数据只会在所有查询运行后加载到电子表格中。

尝试,我只是将最后一行从.Refresh BackgroundQuery:=True更改为.Refresh BackgroundQuery:=False这是一个疯狂的猜测,但它确实有效。

答案 1 :(得分:1)

正如您所猜测的那样,延迟执行后续命令的方法是设置.Refresh BackgroundQuery:=False。一旦你明白这意味着什么,其实的原因显而易见。

从内置的Excel帮助

  

如果建立数据库连接并提交查询,则返回对程序的控制。 QueryTable在后台更新。仅在将所有数据提取到工作表后才将控制返回到过程。

您可能更熟悉异步和同步的术语。 False意味着同步运行查询。

实现相同结果的另一种方法是在后台运行查询 (异步),并在以下代码中轮询.Refreshing属性,直到这变得虚假。这允许您执行其他操作,例如显示自定义进度条。

您还可以加入AfterRefresh事件。

答案 2 :(得分:0)

在结束后立即尝试使用DoEvents。