2015-10-13 74 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