VBA ActiveWorkbook.RefreshAll和Li
2019-02-27 本文已影响0人
大鹏_Power
VBA中,下面这两段代码分别使用的时候不会报错,逐行运行也不报错,但是如果放在一起,前后搭配,则会报错:
ActiveWorkbook.RefreshAll
'全部刷新
Sheets(1).Range("需要刷新的表名").ListObject.QueryTable.Refresh
'刷新指定的具备表结构的表
常见的是这样

有时候是这样

解决方法就是在两行之间写入:
Application.CalculateUntilAsyncQueriesDone
'直到刷新完毕
因此完整的代码是:
ActiveWorkbook.RefreshAll '全部刷新活动工作簿
Application.CalculateUntilAsyncQueriesDone '直到刷新完毕
sheets(1).Range("刷新表名").ListObject.QueryTable.Refresh BackgroundQuery:=False '执行刷新某个PQ或PP返回的表
其中,Range("刷新表名")是你要刷新的具备表结构的表名称,也可也写成表格中的一个单元各的地址,比如表格区域在A1:D100,则可以写该区域任意一个单元格地址,均可正常刷新。后面的是一些特定用法,有兴趣的可以在微软官网看看。
自己在此做个备忘,有遇到该难题的朋友也可以参考下!