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订制工具栏 http://club.excelhome.net/thread-1047254-1-1.htm...
    大海一滴写字的地方阅读 2,294评论 0 0
  • 1.1 VBA是什么 直到90年代早期,使应用程序自动化还是充满挑战性的领域.对每个需要自动化的应用程序,人们不得...
    浮浮尘尘阅读 21,982评论 6 49
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,500评论 0 9
  • 我们在Excel中整理、分析和处理数据时,都是围绕单元格进行大多数操作,因此Range对象是Excel VBA中最...
    完美Excel阅读 7,461评论 1 12
  • 自从2014年开通[完美Excel]微信公众号以来,坚持分享已经学习到的Excel和VBA知识和心得,目前已分享文...
    完美Excel阅读 8,365评论 6 69