首页 > 解决方案 > 停止宏代码执行,直到 SQL 查询完成

问题描述

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

我目前的解决方法是使用使用 Windows API 的 Sleep() 函数插入固定延迟,但这是一个非常丑陋的解决方案,因为它确实降低了我的应用程序的性能并且非常依赖于 CPU 负载,所以它有时可能有效,有时无效。

到目前为止我还没有找到解决这个问题的方法,我在互联网上也找不到任何提示。

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

有没有人知道如何在 Excel 中停止宏代码执行,直到 SQL 事务完成?ADO 中是​​否有方法来检查 SQL 事务的完成情况?

标签: excelvbams-access

解决方案


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

我遇到了这个问题,我关闭了“启用后台刷新”并将“DoEvents”添加到 VBA,这会强制数据连接在允许代码继续之前刷新。这样做的缺点是它让 excel 感觉像是被锁定了,但这解决了我的问题。

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


....Other code....


End With

推荐阅读