如何让Excel VBA在数据连接查询刷新完成后再执行后续代码?
解决Excel查询刷新后代码提前执行的问题
我太懂你踩的这个坑了——Excel默认的查询刷新是异步执行的,说白了就是你刚发出刷新命令,代码就立刻往下跑了,根本不等数据库数据完全加载到工作表里,自然会导致取到的行数是旧数据,分析结果肯定出偏差。
给你两个最直接靠谱的解决办法:
1. 强制同步刷新(最推荐)
在Refresh方法里加上BackgroundQuery:=False参数,这样代码会死死等刷新完全完成后,再执行后续逻辑。修改你的示例代码如下:
' 同步刷新查询,等待数据全部加载完成 ActiveWorkbook.Connections("Query - Entries").Refresh BackgroundQuery:=False ' 现在再取行数就是最新的有效数据了 Total_rows_OCVoucher = Workbooks("Accounting Summary.xlsm").Worksheets("Voucher").Range("B" & Rows.Count).End(xlUp).Row Total_rows_AccSummary = Workbooks("Accounting Summary.xlsm").Worksheets("YourSheetName").Range("...").End(xlUp).Row
这个参数的核心作用就是关闭后台刷新,让刷新操作“阻塞”后续代码,直到数据100%导入工作表才继续。
2. 提前关闭连接的后台刷新属性
如果你不想每次写代码都加参数,可以直接修改连接的默认设置:
- 右键点击Excel「数据」选项卡中的目标连接,选择「属性」
- 在弹出的窗口里取消勾选「启用后台刷新」
- 确定后,以后调用
Refresh都会默认同步执行,不用再额外加参数
小提醒
如果你的查询数据量很大,同步刷新期间Excel会暂时处于无响应状态,这是正常的——毕竟它在等数据库返回所有数据,耐心等加载完成就行,别强行关闭Excel哦。
内容的提问来源于stack exchange,提问作者Pherdindy
相关产品推荐
相关产品推荐

