2017-01-22 70 views
0

在Stack Overflow,msdn,Ozgrid等這裏經過一整天的研究之後,我終於辭職並在這裏問我的問題。VBA PivotField CurrentPage問題 - 過濾器工作於「2018」,但不是「2017」

我有一些透視圖顯示數據透視表的值。圖表在一張表中,在另一張表中透視表。在第三個工作表中,我有一個允許用戶選擇「2017」或「2018」的下拉菜單。基於答案,它過濾使用下面的代碼的所有數據透視表:

Worksheets(8).PivotTables("Table1").PivotFields("Year").CurrentPage = year_target 
Worksheets(8).PivotTables("Table2").PivotFields("Year").CurrentPage = year_target 
Worksheets(8).PivotTables("Table3").PivotFields("Year").CurrentPage = year_target 

現在,如果我選擇「2018」,所有的數據透視表和圖表更新,但如果我選擇「2017年」我的錯誤:

Run-time error '5': Invalid procedure call or argument 

變量year_target根據選擇很好地更新到2017年和2018年,我也嘗試了硬編碼值而不是變量 - 再次2018年效果不錯,但不2017年。如果我去手動點擊「2017」數據透視表(即不使用VBA)它工作正常,透視表和圖表過濾器預期在2017年。數據透視表存在名稱「Table1」等。我的c包括問題是在CurrentPage函數中的某個地方(?)

你對解決方案有任何想法嗎? 會很感激!

截圖:1

編輯:一個星期後,我現在終於設法得到它的權利。我從未找到根本原因。我重新格式化並重新命名了所有內容,圍繞數據透視表移動,爲每個數據透視表創建新圖表和新圖表,以及我能想到的所有其他內容,並突然使其運行。我最好的猜測是有一些舊的格式被隱藏在某處,我在拼命去除的努力中。感謝您的支持。

+0

看看我的答案和下面的代碼,讓我知道它的工作 –

+0

我建議你錄製宏,而今年手動更改所有三個數據透視表「,然後查看結果代碼以查看是否有任何突出顯示。也許在這裏發佈結果代碼。 – jeffreyweir

+0

@jeffreyweir我記錄了下面的代碼:。 子Macro6() ActiveSheet.PivotTables( 「PivotTable5」)透視字段( 「年」)當前頁= 「(全部)」 隨着ActiveSheet.PivotTables( 「PivotTable5」 ).PivotFields( 「年」) .PivotItems( 「2017年」)。可見=假 .PivotItems( 「2018」)。可見=真 尾隨着 結束小組 當我跑重置過濾器和跑Macro6我收到以下錯誤: 運行時錯誤'1004': 無法獲取數據透視表類的PivotFields屬性 – sixty

回答

0

也許嘗試先刪除所有現有的年份過濾器(即 - 再次顯示所有年份),然後過濾一年。這可能是因爲你已經在2018年過濾了,新的過濾器(2017)正在嘗試僅在2018年的結果中進行過濾。

+0

感謝您的回覆。我確實嘗試了這種方法,無論是手動點擊工作表中的數據透視表,還是自動使用VBA代碼,如Shai在他的評論中所建議的那樣。即使代碼完全一樣,2017年和2018年之間似乎也有一些區別... – sixty

+0

看起來您有3個數據透視表。你確定所有3個都有2017年的價值嗎?也許其中一個表沒有任何年份是2017年,所以它導致了一個錯誤? –

+0

我實際上有6個數據透視表,即使它們都具有「2017」值(它們都可以手動過濾「2017」),它們都有相同的問題。我嘗試在VBA代碼中切換它們的順序,並且通過單獨的宏一次更新它們,但無濟於事 – sixty

0

嘗試類似下面的代碼:

Dim PvtTbl As PivotTable 

For Each PvtTbl In Worksheets(8).PivotTables '<-- loop through all Pivot Tables in worksheet(8) 
    With PvtTbl 
     .PivotFields("Year").CurrentPage = "(All)" '<-- reset all filters 

     On Error Resume Next 
     .PivotFields("Year").CurrentPage = year_target '<-- set to current year's filter 
     If Err.Number <> 0 Then '<-- no values found for current year 
      MsgBox "No values found for the year " & year_target 
     End If 
     On Error GoTo 0 
    End With 
Next PvtTbl 
+0

感謝您的快速回復。我嘗試添加這些行並收到相同的錯誤: 運行時錯誤'5':無效的過程調用或參數 調試時出現以下錯誤代碼行: .PivotFields(「Year」)。CurrentPage = 「(全部)」'< - 重置所有過濾器 – sixty

+0

@sixty您可以在您的文章中添加數據透視表的屏幕截圖嗎?試圖手動設置「年份」透視字段?那面對你在這條線上得到一個錯誤讓我覺得錯誤來自某種類型的錯誤或類似 –

+0

我添加了一個截圖。該領域實際上被稱爲「Año」,但爲了簡單起見,我將其描述爲「年」。當然,我在上面提到的代碼中改回了Año。不確定此截圖是否您所期望的?我同意你的看法,認爲這個問題很可能是由於2017年到2018年之間的類型錯誤造成的,但我不知道如何識別它。 – sixty