我有一个包含多个表的电子表格,其中的数据来自外部数据源(SQL数据库)。通过更改下拉框中的选项然后按下按钮以运行VBA来刷新连接/表。
每个表附加一个数据透视表。数据透视表不会随表一起刷新。如果我尝试按下刷新,我会收到错误;
'未找到数据源名称且未指定默认驱动程序'
但是,如果我浏览电子表格并在每个数据透视表上点击刷新,则会更新而不会出现错误。
因此,我需要一些方法来使用表格刷新数据透视表,或者使用一个只刷新数据透视表而不刷新外部数据连接的按钮。
任何想法都赞赏,我不知道从这个开始的地方!
答案 0 :(得分:3)
您可以像这样刷新Sheet1上的给定数据透视表:
Sheet1.PivotTables(1).RefreshTable
这将刷新Sheet1上的第一个数据透视表。更改另一个的索引号。
或者...
您可以通过调用此例程刷新给定表上的所有数据透视表:
Sub RefreshPivotTables(ws As Worksheet)
Dim pt As PivotTable
For Each pt In ws.PivotTables
pt.RefreshTable
Next
End Sub
您可以使用与问题中提到的更新表格的按钮相关的相同代码调用上述例程。
或者...
如果您想更新工作簿中的所有数据透视表,可以使用此版本的例程:
Sub RefreshPivotTables(wb As Workbook)
Dim ws As Worksheet
Dim pt As PivotTable
For Each ws In wb.Worksheets
For Each pt In ws.PivotTables
pt.RefreshTable
Next
Next
End Sub
你会这样称呼这个版本:
RefreshPivotTables ThisWorkbook
答案 1 :(得分:0)
Becky:你有没有直接从SQL查询中填充这些数据透视表的原因?除非你出于某种原因需要那些表格,否则我建议只是把它们放在一边,然后简单地将数据直接转换为数据透视表。否则,您有效地将文件中的相同数据保存两次。 (或者三次,如果您没有取消选中"使用文件&#34保存源数据;在数据透视表>数据>选项下保存。
如果你确实需要刷新它们 - 如果有多个数据透视表连接到每个表 - 那么迭代底层数据透视表并刷新源类型是Excel范围的任何地方都会更有效。在VBA中,请说出pc.SourceType = xlDatabase
的位置Sub Refresh_PivotCaches()
Dim pc As PivotCache
For Each pc In ActiveWorkbook.PivotCaches
If pc.SourceType = xlDatabase Then pc.Refresh
Next pc
End Sub
如果您反而遍历每个数据透视表,那么如果多个数据透视表连接到一个数据透视表,您最终会进行比您需要的更多刷新。例如,如果您有10个数据透视表都指向同一个表,则不需要单独刷新这10个数据透视表。相反,您只需要刷新它们共享的一个PivotCache。如果您要单独刷新这10个数据透视表,那么实际上您将刷新这10个数据透视表中的每一个10次。
当然,如果你的数据透视表很小,你就不会发现我的代码和Excel Heros之间有任何区别。
答案 2 :(得分:0)
我在代码的末尾添加了以下内容,似乎工作正常。
Dim PT As PivotTable
Dim WSH As Worksheet
For Each WSH In ThisWorkbook.Worksheets
For Each PT In WSH.PivotTables
PT.RefreshTable
Next PT
Next WSH
答案 3 :(得分:0)
我知道这是一篇过时的文章,但是分享以防万一,这可以帮助任何人像我一样研究它-这可能是Excel 2016的新功能(我无法访问当前要测试的旧版本),但是我发现您可以禁用外部数据源上的“使用全部刷新来刷新”设置。然后,您可以使用“数据”标签中的“全部刷新”来一次更新所有数据透视表,而无需再次更新外部数据源查询:
我通过一次调用手动查询更新来在报表宏中使用它: (在查询创建的每个表中选择一个单元格)
ActiveWorkbook.Sheets("Completed").Select
Range("A2").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
然后根据需要调用refresh all更新我的数据透视表:
ActiveWorkbook.RefreshAll