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

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

连接到每个这些表是一个数据透视表。 数据透视表不会随表格一起刷新。 如果我尝试按刷新所有我得到的错误;

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

但是,如果我通过电子表格并刷新每个数据透视表,他们更新没有错误。

所以,无论我需要某种方式来获取数据透视表刷新与表或有一个button只刷新数据透视表,而不是外部数据连接。

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

您可以刷新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 

你可以从与你的问题中提到的button相关的代码中调用上面的例程来更新表格。

要么…

如果您想要更新工作簿中的所有数据透视表,则可以使用此版本的例程:

 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 

Becky:有什么理由不直接从SQL查询中填充这些数据透视表? 除非你需要这些表,出于某种原因,我build议只是沟通,只需将数据直接转换为数据透视表。 否则,您将有效地在文件中保存两次相同的数据。 (或三次,如果您尚未取消选中“数据透视表”>“数据”>“选项”下的“使用文件保存源数据”。

如果您需要刷新它们(如果有多个数据透视表连接到每个表),那么遍历基础PivotCaches并刷新源types为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个数据透视表都指向同一个表,则不需要分别刷新这10个数据透视表。 相反,您只需刷新它们共享的一个PivotCache即可。 如果您要单独刷新这10个数据透视表,那么实际上您将刷新这10个数据透视表中的每一个10次。

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

我在我的代码的末尾添加了以下内容,似乎工作正常。

 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