gpt4 book ai didi

vba - 在 VBA 完成执行之前,Power Query 表不会下载数据

转载 作者:行者123 更新时间:2023-12-04 20:33:23 47 4
gpt4 key购买 nike

我有一个包含 4 个工作表的电子表格,每个工作表都连接到一个电源查询,该查询连接到一个 OLEDB 数据库并运行一个选择以将数据导入工作簿。

我正在尝试自动刷新查询。

我在工作簿中有 VBA
- 禁用后台刷新,
- 运行 Workbook.RefreshAll,
- 将后台刷新重置为真(因为我需要这个让自动化软件能够首先运行它)和
- 然后等待 30 秒,给自动化软件一点时间,然后再开始保存工作簿。

软件所做的只是调用工作簿中的宏,然后保存以下执行。

查询一个接一个地正确执行,我可以告诉表中的数据已刷新。

行已下载的电源查询确认发生在 VBA 完成执行之后,因此自动化软件在此完成之前将其保存,并且 Excel 报告下载失败。当一切正常时这不是问题,但我们不知道下载何时真正失败,除非我添加某种行数比较,这实际上是一种解决方法,而不是实际的解决方案。

我尝试在工作簿中创建两个子程序,一个执行刷新,然后另一个调用第一个子程序,然后等待 30 秒,我希望在第一个子程序完成执行后完成下载,但这不会发生。我尝试一次刷新一个连接而不是使用 RefreshAll,尝试刷新实际的电源查询表而不是连接,并尝试在后台查询设置为 true 的情况下刷新,然后循环直到刷新被标记为完成(如果你单步执行,但如果您完全运行 VBA,则会崩溃)。

我还尝试在 VBA 结束时保存电子表格,但它仍然要等到保存完成才能更新电源查询状态。

我最新的 VBA:

Sub Workbook_RefreshAll()

Application.DisplayAlerts = False

For Each objConnection In ThisWorkbook.Connections

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

Next

ActiveWorkbook.RefreshAll

For Each objConnection In ThisWorkbook.Connections

'Re-enable background-refresh
objConnection.OLEDBConnection.BackgroundQuery = True
objConnection.OLEDBConnection.MaintainConnection = True

Next

newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 30
waitTime = TimeSerial(newHour, newMinute, newSecond)

Application.Wait waitTime

End Sub

(我不记得维护连接参数是否真的有帮助,因为我试图在每次刷新后强制连接断开,但它有效,所以没有把它拿出来。)

最佳答案

而不是 Application.Wait尝试以下操作:

Do until now() >= waittime
DoEvents
Loop

关于vba - 在 VBA 完成执行之前,Power Query 表不会下载数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46446171/

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