使用Excel VBA宏实现单独刷新外部连接的按钮功能
批量刷新Excel外部连接(独立于数据透视表)的通用VBA代码
需求背景
你有多个包含大量数据透视表和外部连接的工作簿,需要分别独立刷新这两类元素:
- 已实现仅刷新所有数据透视表的VBA代码
- 缺少通用的批量刷新所有外部连接的代码(无需指定连接名称,适配任意工作簿)
- Excel自带的「全部刷新」会同时刷新数据透视表,不符合需求
已有的数据透视表刷新代码
Dim Hoja As Worksheet Dim TD As PivotTable For Each Hoja In ActiveWorkbook.Sheets For Each TD In Hoja.PivotTables ' 刷新单个数据透视表 TD.RefreshTable Next TD Next Hoja
通用外部连接批量刷新代码
以下代码可遍历当前活动工作簿的所有外部连接并批量刷新,无需手动指定连接名称:
版本1:仅刷新外部数据源连接(推荐)
过滤掉透视表内部缓存连接,只刷新真正的外部数据源(ODBC/OLEDB/文本/Web等):
Dim conn As WorkbookConnection For Each conn In ActiveWorkbook.Connections ' 判断连接类型为外部数据源 Select Case conn.Type Case xlConnectionTypeODBC, xlConnectionTypeOLEDB, _ xlConnectionTypeText, xlConnectionTypeWeb, xlConnectionTypeXMLMAP conn.Refresh End Select Next conn
版本2:刷新所有连接(含内部缓存)
如果不需要过滤类型,直接遍历所有连接刷新:
Dim conn As WorkbookConnection For Each conn In ActiveWorkbook.Connections conn.Refresh Next conn
关键说明
- 这段代码适配任意工作簿,无需修改连接名称,打开目标工作簿后运行即可
- 与Excel自带的「全部刷新」不同,此代码仅刷新连接本身,不会主动触发数据透视表的
RefreshTable操作(若透视表基于这些连接,数据会自动同步,但不会执行透视表的刷新逻辑) - 可将代码绑定到按钮,实现一键刷新当前工作簿的所有外部连接
内容的提问来源于stack exchange,提问作者juanpastortapara
相关产品推荐
相关产品推荐

