2015-10-13 73 views
0

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

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

“数据源名称找不到和未指定默认驱动程序”

但是如果我去通过电子表格和命中刷新每个单独的数据透视表,他们没有错误更新。

因此,无论我需要某种方式来获取数据透视表刷新与表或具有只刷新数据透视表,而不是刷新外部数据连接的按钮。

任何想法赞赏,我不知道从哪里开始这一个!

回答

2

可以刷新工作表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 
+0

我可以做同样的事情,但更改工作簿的工作表? – Becky

+0

@Becky请在我的答案底部查看更新。 –

+0

@Becky你能完成这项工作吗? –

0

Becky:你没有直接从SQL查询中填充这些数据透视表的任何原因?除非你因为某种原因需要这些表格,否则我建议只是把它们丢掉,然后直接将数据直接转换为数据透视表。否则,你会有效地在文件中保存两次相同的数据。 (或三次,如果你还没有选中数据透视表>数据>选项下的“保存源文件数据”

如果你确实需要刷新它们 - 并且如果有多个数据透视表连接到每个表 - 那么它为更有效地通过底层的PivotCaches迭代和刷新任何地方的sourceType的是一个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 

如果不是通过每一个数据透视表迭代,那么如果多个数据透视表连接到一个PivotCache,最终会进行比您需要的刷新更多的刷新。例如,如果您有10个数据透视表, t到同一张表,你需要而不是需要分别刷新这10个数据透视表。相反,您只需刷新它们共享的一个PivotCache。如果您要单独刷新这10个数据透视表,则实际上您将刷新这10个数据透视表中的每一个10次。

当然,如果您的数据透视表很小,您将不会注意到我的代码和Excel Heros之间有任何区别。

+0

不幸的是我需要原始数据转储以及汇总数据。 – Becky

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