Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 停止宏代码执行,直到SQL查询完成_Excel_Vba_Ms Access - Fatal编程技术网

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

Excel 停止宏代码执行,直到SQL查询完成,excel,vba,ms-access,Excel,Vba,Ms Access,我编写了一个相当复杂的应用程序,使用ADO 6.1库,使用Excel 2016作为MS Access数据库中存储数据的前端应用程序。我注意到在宏代码执行过程中,Excel应用程序触发的SQL事务可能需要很长时间才能完成,通常Excel宏中下一行代码的执行取决于首先完成的SQL事务。不幸的是,宏代码执行和SQL事务是异步操作,这意味着即使SQL事务尚未完成,宏也会跳到下一行代码 我目前的解决方法是使用一个睡眠函数,使用Windows API插入一个固定的延迟,但这是一个非常难看的解决方案,因为它确

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

我目前的解决方法是使用一个睡眠函数,使用Windows API插入一个固定的延迟,但这是一个非常难看的解决方案,因为它确实降低了我的应用程序的性能,并且在很大程度上取决于CPU负载,所以它有时可能工作,有时不工作

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

使用Application.CalculateUntilAsyncQueriesDone在这里也没有帮助


是否有人知道或知道如何在SQL事务完成之前停止Excel中的宏代码执行?ADO中是否有检查SQL事务完成情况的方法?

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

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

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


....Other code....


End With

在我看来,这并不是等待的行为,vba AFAIK在执行上一个操作后执行下一个操作显示相关代码段