2017-06-12 118 views
-1

得到另一個Excel VBA宏按鈕問題。運行時錯誤-2147024809(80070057) - 數據透視表字段名稱無效

我想做一個按鈕來刷新工作表上的所有樞軸(有四個)。我以前去過StackOverflow,並且收到了一個運行良好的解決方案。我把我之前提供並更新其新的工作簿的代碼,但它的功能.ChangePivotCache PvtCache如下失敗:

Sub Button1_Click() 

Dim PvtTbl     As PivotTable 
Dim PvtCache    As PivotCache 
Dim PvtDataRng    As Range 

Set PvtDataRng = Worksheets("OTR_Promo_List_ADV_2017").Range("B2:AU500") 

Set PvtCache = ActiveWorkbook.PivotCaches.Add(xlDatabase, PvtDataRng) 

Set PvtTbl = Worksheets("Desired_Distribution").PivotTables("PivotTable1") 

For Each PvtTbl In Worksheets("Desired_Distribution").PivotTables 

    Set PvtCache = ActiveWorkbook.PivotCaches.Add(xlDatabase, PvtDataRng) 

    With PvtTbl 
     .ChangePivotCache PvtCache 
     .RefreshTable 
    End With 

    Set PvtCache = Nothing 

Next PvtTbl 

End Sub 

唯一的區別是,該工作簿改變,現在我想刷新4個繞代替2 - 這可能是問題嗎?

在屏幕截圖下方,您可以看到工作表。 「OTR_Promo_List_ADV-2017」是數據庫。透視表具有默認的命名,我沒有更改名稱(即PivotTable1,PivotTable2 ...)

enter image description here

謝謝!

+0

我記得這個,但我的代碼有點不同。首先,你不需要'For Each PvtTbl ...'循環之前的兩行'Set PvtCache'和'Set PvtTbl'。第二,如果你的Range不是動態的(Range(「B2:AU500」是靜態的),爲什麼你需要運行這個代碼? –

+0

我不知道,我簡直就是複製和粘貼我提供的任何東西...... – Kevbo

回答

0

用於刷新一張紙上所有透視表的代碼看起來過於複雜。我不太明白你爲什麼要使用.ChangePivotCache。它更改指定數據透視表的數據源。如果你只是想刷新數據透視表,那是完全沒有根據的。

您可以使用Excel Table對象作爲數據透視表的數據源,然後進行簡單刷新即可。或者,如果您不想使用表格(儘管您可能真的想要查看該表格,原因很明顯),您可以使用動態範圍名稱來定義數據透視表源代碼。使用這兩種技術,您只需刷新數據透視表並且不必使用VBA操作數據透視緩存。

隨着表或動態範圍的名稱作爲透視表的源代碼,你可以通過它們循環刷新表中的所有數據透視表,並沿着這些線路碼刷新他們:

Sub RefreshPivotsOnSheet() 
    Dim ws As Worksheet 
    Dim pt As PivotTable 
    Set ws = Worksheets("MySheet") 
    For Each pt In ws.PivotTables 
     pt.RefreshTable 
    Next pt 
End Sub 

編輯:如何將Excel Tables設置爲關鍵點的數據源:使用Ctrl + T或Insert> Table將源數據轉換爲表格。然後編輯數據透視表數據源並將其指向您剛剛創建的Excel表。

+0

我嘗試使用這裏提供的代碼,但它在運行時錯誤1004「數據透視表字段名稱無效」部分「pt.Refreshtable」失敗。我可能會遺漏一些東西,因爲我不知道如何將Excel Table對象設置爲數據源... – Kevbo

+0

我添加了關於表的關於數據透視表的說明,該代碼在我的場景中運行良好,你的數據透視表字段名稱是什麼?錯誤表示一個是無效的,所以你可能想檢查字段名來命名 – teylyn

-1

我能夠關閉這個話題。我在其他地方發現了一個簡單的宏,只說:

Sub REFRESH() 
' 
' REFRESH Macro 
' 

' 
    ActiveWorkbook.RefreshAll 
End Sub 

似乎要做的伎倆。

謝謝你的所有輸入!

+0

Dude ...有人給我從這個網站的其他宏。我是一個完整的VBA newb。 – Kevbo

+0

我不是在抱怨...只是說對一個總是VBA n00b的人來說,尋求幫助是有點......沒有幫助。而我複製的代碼直接與我在此之前詢問過的類似問題有關。 – Kevbo

相關問題