VBA ActiveWorkbook.RefreshAll和ListObject.QueryTable.Refresh同时使用

VBA中,下面这两段代码分别使用的时候不会报错,逐行运行也不报错,但是如果放在一起,前后搭配,则会报错:

ActiveWorkbook.RefreshAll 
'全部刷新

Sheets(1).Range("需要刷新的表名").ListObject.QueryTable.Refresh 
'刷新指定的具备表结构的表

常见的是这样


报错1

有时候是这样


报错2

解决方法就是在两行之间写入:

Application.CalculateUntilAsyncQueriesDone 
'直到刷新完毕

因此完整的代码是:

ActiveWorkbook.RefreshAll '全部刷新活动工作簿
Application.CalculateUntilAsyncQueriesDone '直到刷新完毕
sheets(1).Range("刷新表名").ListObject.QueryTable.Refresh BackgroundQuery:=False '执行刷新某个PQ或PP返回的表

其中,Range("刷新表名")是你要刷新的具备表结构的表名称,也可也写成表格中的一个单元各的地址,比如表格区域在A1:D100,则可以写该区域任意一个单元格地址,均可正常刷新。后面的是一些特定用法,有兴趣的可以在微软官网看看。

自己在此做个备忘,有遇到该难题的朋友也可以参考下!

你可能感兴趣的:(VBA ActiveWorkbook.RefreshAll和ListObject.QueryTable.Refresh同时使用)