刷新数据透视表但不刷新外部数据源

时间:2015-10-13 16:06:39

标签: excel external pivot-table

我有一个包含多个表的电子表格,其中的数据来自外部数据源(SQL数据库)。通过更改下拉框中的选项然后按下按钮以运行VBA来刷新连接/表。

每个表附加一个数据透视表。数据透视表不会随表一起刷新。如果我尝试按下刷新,我会收到错误;

'未找到数据源名称且未指定默认驱动程序'

但是,如果我浏览电子表格并在每个数据透视表上点击刷新,则会更新而不会出现错误。

因此,我需要一些方法来使用表格刷新数据透视表,或者使用一个只刷新数据透视表而不刷新外部数据连接的按钮。

任何想法都赞赏,我不知道从这个开始的地方!

4 个答案:

答案 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的新功能(我无法访问当前要测试的旧版本),但是我发现您可以禁用外部数据源上的“使用全部刷新来刷新”设置。然后,您可以使用“数据”标签中的“全部刷新”来一次更新所有数据透视表,而无需再次更新外部数据源查询:

  1. “数据”标签>“连接”部分>“打开连接”
  2. 在“工作簿连接”窗口中选择一个连接,然后单击“属性...”。
  3. 在属性窗口中,取消选中“在刷新全部时刷新此连接”复选框。
  4. 重复其他您不想自动更新的外部连接

我通过一次调用手动查询更新来在报表宏中使用它: (在查询创建的每个表中选择一个单元格)

ActiveWorkbook.Sheets("Completed").Select
Range("A2").Select
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

然后根据需要调用refresh all更新我的数据透视表:

ActiveWorkbook.RefreshAll

Click for Screenshots of Steps