Excel VBA批量刷新文件连接问题:未完成刷新即关闭文件
解决Excel文件刷新前被提前关闭的问题
你的推测方向是对的,但用固定延迟不够可靠——网络波动或数据量变化都会导致延迟时长失效。更稳妥的方式是确保每个连接的刷新彻底完成后再继续,同时优化代码的健壮性:
修改后的代码
Sub Task() Dim WB As Workbook ' 打开文件时直接赋值给WB,避免通过文件名查找的潜在问题 Set WB = Workbooks.Open(Filename:="......sharepoint.com/sites/dummylocation/dummyfile.xlsx") Dim ObjConnection As Variant Dim bBackground As Boolean For Each ObjConnection In WB.Connections ' 只处理OLEDB类型的连接,避免非目标连接报错 If ObjConnection.Type = xlConnectionTypeOLEDB Then With ObjConnection.OLEDBConnection ' 保存原背景刷新设置 bBackground = .BackgroundQuery ' 强制同步刷新(必须等待完成才继续) .BackgroundQuery = False ' 执行刷新 .Refresh ' 恢复原设置 .BackgroundQuery = bBackground End With End If Next ' 可选:如果需要保留刷新后的内容,添加保存语句 ' WB.Save ' 确认所有刷新完成后关闭文件 WB.Close SaveChanges:=False ' 根据需求改成True End Sub
关键优化点
- 打开文件时直接将返回值绑定到
WB对象,避免依赖文件名查找(文件名含空格、重名时容易出错) - 增加连接类型判断,跳过非OLEDB连接,防止代码报错
- 使用
With语句简化代码,同时确保对OLEDB连接的操作更精准 - 明确
SaveChanges参数,避免弹出保存提示
内容的提问来源于stack exchange,提问作者Cameron Willey
相关产品推荐
相关产品推荐

