【问题标题】:Have Excel VBA wait for PowerQuery data refresh to continue让 Excel VBA 等待 Power Query 数据刷新以继续
【发布时间】:2015-12-31 19:22:42
【问题描述】:

我的场景:我有一些通过 PowerQuery 提取的数据表,我希望它们能够自动刷新数据、保存并关闭。我有一个任务计划程序每天凌晨 1 点运行这些。问题是 Excel VBA 在进入下一步(保存)之前不会等待 PowerQuery 更新。

有很多关于这个的博客,我没有找到任何答案 - 但它让我找到了一些对我有用的东西!我对代码并不感到自豪,但它是:

     Public Sub DataRefresh()

DisplayAlerts = False

For Each objConnection In ThisWorkbook.Connections
    'Get current background-refresh value
    bBackground = objConnection.OLEDBConnection.BackgroundQuery

    'Temporarily disable background-refresh
    objConnection.OLEDBConnection.BackgroundQuery = False

    'Refresh this connection
    objConnection.Refresh

    'Set background-refresh value back to original value
    objConnection.OLEDBConnection.BackgroundQuery = bBackground
Next

Workbooks("DA List.xlsm").Model.Refresh
DoEvents

For i = 1 To 100000
Worksheets("DA List").Range("G1") = i
Next i
DoEvents

ActiveWorkbook.Save
Application.Quit

End Sub

我认为这是可行的,因为除了数据刷新之外,我还给了 excel 一些事情要做,而 DoEvents 和我的下一步之间的额外行似乎让 VBA 最终弄清楚了我的意图。

希望这会有所帮助!

【问题讨论】:

  • 您应该发布对您有用的答案作为答案,以便它在搜索结果中显示为解决方案的问题。 (在标题中添加 [已解决] 不是 SO 方式)。此外,您的代码块中有相当多的空白区域可以删除。

标签: excel vba wait


【解决方案1】:
 Public Sub DataRefresh()

DisplayAlerts = False

For Each objConnection In ThisWorkbook.Connections
'Get current background-refresh value
bBackground = objConnection.OLEDBConnection.BackgroundQuery

'Temporarily disable background-refresh
objConnection.OLEDBConnection.BackgroundQuery = False

'Refresh this connection
objConnection.Refresh

'Set background-refresh value back to original value
objConnection.OLEDBConnection.BackgroundQuery = bBackground
Next

Workbooks("DA List.xlsm").Model.Refresh
DoEvents

For i = 1 To 100000
Worksheets("DA List").Range("G1") = i
Next i
DoEvents

ActiveWorkbook.Save
Application.Quit

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-14
    • 2018-06-08
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 2015-04-19
    • 1970-01-01
    相关资源
    最近更新 更多