停止执行宏代码,直到完成SQL查询

时间:2019-05-30 16:07:09

标签: excel vba ms-access

我编写了一个相当复杂的应用程序,它使用ADO 6.1库将Excel(2016)用作存储在MS Access数据库中的数据的前端应用程序。我注意到在宏代码执行期间,由我的Excel应用程序触发的SQL事务可能需要很长时间才能完成,并且通常,我的Excel宏中下一行代码的执行取决于首先完成此SQL事务。不幸的是,宏代码执行和SQL事务是异步操作,这意味着即使SQL事务尚未完成,宏也会跳转到下一行代码。

我当前的解决方法是使用Windows API使用Sleep()函数来插入固定的延迟,但这是一个非常丑陋的解决方案,因为它确实会降低我的应用程序的性能,并且在很大程度上取决于CPU负载,因此有时可能会起作用,有时却不会。

到目前为止,我仍无法找到解决该问题的方法,也无法在Internet上找到任何提示。

在这里使用Application.CalculateUntilAsyncQueriesDone也无济于事。

是否有人有想法或提示如何在Excel事务完成之前停止Excel中的宏代码执行? ADO中是否有一种方法可以检查SQL事务的完成情况?

1 个答案:

答案 0 :(得分:1)

您的查询是否在“数据/连接”部分中?

我遇到了这个问题,我关闭了“启用后台刷新”,并向VBA添加了“ DoEvents”,这将强制数据连接刷新,然后再继续执行代码。不利的一面是,它使excel像被锁定了一样,但这解决了我的问题。

Sub Button1_Click()
ActiveWorkbook.Connections("ScrapData").Refresh
DoEvents


....Other code....


End With