VBA:刷新 Power 查询并随后更新数据透视表
VBA: Refresh Power query and subsequently update pivot tables
我有一个 Excel 文件,其中包含一个 sheet“DATA”,其中包含使用 Power Query 提取的数据,另外三个 sheet 包含枢轴 table 都依赖于“DATA”中这些提取的数据。
我想创建一个 VBA,它 (1) 在 Excel 文件打开时自动 refreshes/reruns 上面指定的 Power Query,并且 (2) 随后更新三个数据透视表 tables 镜像更新后的数据。
我试了好几次,在Whosebug上找了类似的问题,但是都没有成功:
虽然我可以通过刷新连接来刷新数据,但 Pivot tables 没有相应更新。
一个 VBA 代码没有产生预期的结果(即随后更新 Pivot table)是:
Sub test()
Dim ws As Worksheet
Dim pt As PivotTable
'ActiveWorkbook.RefreshAll 'make sure the refresh in bg property is false for all connections
ActiveWorkbook.Connections("Name of Query").Refresh
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
pt.RefreshTable
Next pt
Next ws
End Sub
谢谢!
您必须确保“后台刷新”设置为 false:
Sub Refresh_All_Data_Connections()
Dim objConnection, bBackground
For Each objConnection In ThisWorkbook.Connections
'Get current background-refresh value
bBackground = objConnection.OLEDBConnection.BackgroundQuery
'Temporarily disable background-refresh
objConnection.OLEDBConnection.BackgroundQuery = False
'Refresh this connection
objConnection.refresh
'Set background-refresh value back to original value
objConnection.OLEDBConnection.BackgroundQuery = bBackground
Next
ThisWorkbook.RefreshAll
End Sub
更新:添加了 refreshall 以刷新所有数据透视表。
如果您只想刷新特定查询(假设设置了 sh),请重新阅读您的问题:
sh.ListObjects("Name of Table").QueryTable.refresh BackgroundQuery:=False
ThisWorkbook.RefreshAll
我有一个 Excel 文件,其中包含一个 sheet“DATA”,其中包含使用 Power Query 提取的数据,另外三个 sheet 包含枢轴 table 都依赖于“DATA”中这些提取的数据。
我想创建一个 VBA,它 (1) 在 Excel 文件打开时自动 refreshes/reruns 上面指定的 Power Query,并且 (2) 随后更新三个数据透视表 tables 镜像更新后的数据。
我试了好几次,在Whosebug上找了类似的问题,但是都没有成功: 虽然我可以通过刷新连接来刷新数据,但 Pivot tables 没有相应更新。
一个 VBA 代码没有产生预期的结果(即随后更新 Pivot table)是:
Sub test()
Dim ws As Worksheet
Dim pt As PivotTable
'ActiveWorkbook.RefreshAll 'make sure the refresh in bg property is false for all connections
ActiveWorkbook.Connections("Name of Query").Refresh
For Each ws In ActiveWorkbook.Worksheets
For Each pt In ws.PivotTables
pt.RefreshTable
Next pt
Next ws
End Sub
谢谢!
您必须确保“后台刷新”设置为 false:
Sub Refresh_All_Data_Connections()
Dim objConnection, bBackground
For Each objConnection In ThisWorkbook.Connections
'Get current background-refresh value
bBackground = objConnection.OLEDBConnection.BackgroundQuery
'Temporarily disable background-refresh
objConnection.OLEDBConnection.BackgroundQuery = False
'Refresh this connection
objConnection.refresh
'Set background-refresh value back to original value
objConnection.OLEDBConnection.BackgroundQuery = bBackground
Next
ThisWorkbook.RefreshAll
End Sub
更新:添加了 refreshall 以刷新所有数据透视表。 如果您只想刷新特定查询(假设设置了 sh),请重新阅读您的问题:
sh.ListObjects("Name of Table").QueryTable.refresh BackgroundQuery:=False
ThisWorkbook.RefreshAll