电源查询表将不会下载数据,直到VBA完成执行

问题描述:

我有一个包含4个工作表的电子表格,每个工作表连接到一个电源查询,该查询连接到一个OLEDB数据库并运行select将数据导入工作簿。电源查询表将不会下载数据,直到VBA完成执行

我试图自动刷新查询。

我有VBA中
工作簿 - 禁用背景的刷新,
- 运行Workbook.RefreshAll,
- 重置后台刷新为true(因为我需要这样的自动化软件,以便能够运行首先)和
- 然后在开始保存工作簿之前,等待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 
+0

我没有尝试的DoEvents的一些变化,但它似乎没有处理负荷。尝试了这一点,虽然仍然无法正常工作,但试图在刷新之后立即将其移动,但仍然没有快乐。有趣的是,如果我在代码中插入一个断点或者逐步完成加载,就像代码在更新加载状态之前需要物理停止执行一样。 –