让 Excel VBA 等待 Power Query 数据刷新继续
Have Excel VBA wait for PowerQuery data refresh to continue
我的方案:我有一些通过 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 终于弄清楚我是什么打算。
希望对您有所帮助!!
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
我的方案:我有一些通过 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 终于弄清楚我是什么打算。
希望对您有所帮助!!
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