gpt4 book ai didi

vba - 如何等到 ActiveWorkbook.RefreshAll 完成后再执行更多代码

转载 作者:行者123 更新时间:2023-12-01 16:33:29 24 4
gpt4 key购买 nike

我有一个子例程,它调用 ActiveWorkbook.RefreshAll 从网站上的 XML 源引入新数据,然后对其执行多项修改。问题是没有足够的时间来完成 RefreshAll 命令,因此以下子命令和函数最终无法正确执行,从而导致重复的行无法正确删除。

我尝试过使用 Application.WaitSleep 函数,但它们似乎也暂停了刷新过程。我只是希望其余代码等到刷新过程完成后再执行其余代码。

现在我只能通过不调用 RefreshAll 来修复它,这让我想到了实现第二个流程以供稍后执行,但这不是一个好的解决方法。

根据http://www.mrexcel.com/forum/excel-questions/564959-execute-code-after-data-connection-refresh-finished.html ,XML 连接没有 BackgroundQuery bool 值。该选项仅适用于 ODBC 和 OLEDB 连接,它们的类型分别为 xlConnectionTypeODBCxlConnectionTypeOLEDB。我使用的 XML 连接类型为 xlConnectionTypeXMLMAP

此代码是我通过 UI 执行此操作时记录的宏(包括取消选中表属性中的“启用后台刷新”):

With ActiveWorkbook.Connections("XMLTable")
.Name = "XMLTable"
.Description = ""
End With
ActiveWorkbook.Connections("XMLTable").refresh

ActiveWorkbook.Connections 类没有 BackgroundQuery 选项,因此我可以将其设置为 False。

如何强制后续代码等待 RefreshAll 完成?

最佳答案

我在 OLEDBConnection 连接类型上遇到了同样的问题,但是 DoEvents (如先前答案中所建议的)对我没有帮助,因为我的数据连接启用了后台刷新。相反,使用 Wayne G. Dunnanswer作为起点,我创建了以下有效的解决方案:

Sub Refresh_All_Data_Connections()

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

MsgBox "Finished refreshing all data connections"

End Sub

MsgBox 仅用于测试,一旦您对代码等待感到满意,就可以将其删除。

此外,与 ActiveWorkbook 相比,我更喜欢 ThisWorkbook,因为我知道它会定位代码所在的工作簿,以防焦点发生变化。十分之九这并不重要,但我喜欢谨慎行事。

但是,请注意,由于这使用了 BackgroundQuery,因此如果您使用 xlConnectionTypeXMLMAP 连接,这将不起作用,抱歉。

关于vba - 如何等到 ActiveWorkbook.RefreshAll 完成后再执行更多代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22083668/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com