2015-09-09 109 views
0

我已經編寫了下面的代碼來編輯兩個數據透視表的範圍。直到明星行我的代碼正常運行,但是我得到一個「運行時錯誤'1004':應用程序定義或對象定義」錯誤.PivotCache.SourceData = rng.Address(True, True, xlR1C1, True)行。我不知道錯誤的原因是什麼,因爲我複製了上面的代碼,只改變了表名和數據透視表名(它們都存在於我的文件中)。任何幫助?.PivotCache.SourceData導致應用程序或對象定義的錯誤

Dim RowCount As Integer 
Dim ColCount As Integer 
Dim rng As Range 
Dim CurrentPeriod As String 
Dim PivotList As Variant 
Dim Piv As String 
Dim PivotSht As String 
Dim PivotNme As String 

RowCount = WorksheetFunction.CountA(Sheets("Data").Range("A:A")) 
ColCount = WorksheetFunction.CountA(Sheets("Data").Range("1:1")) 

Set rng = Sheets("Data").Range(Sheets("Data").Cells(1, 1), Sheets("Data").Cells(RowCount, ColCount)) 

CurrentPeriod = Sheets("Static").Range("CurrentPeriod") 

With Sheets("Val Cat Current Returns (Adj)").PivotTables("CatCurrentPivot1") 
    .PivotCache.SourceData = rng.Address(True, True, xlR1C1, True) 
    .PivotFields("Period_id").CurrentPage = CurrentPeriod 
    .PivotCache.Refresh 
End With 

********************************** 
With Sheets("Val Cat Trend Returns (Adj)").PivotTables("CatTrendPivot1") 
    .PivotCache.SourceData = rng.Address(True, True, xlR1C1, True) 
    .PivotCache.Refresh 
End With 
+0

在黑暗中拍攝..試試這個......'.PivotCache.SourceData =表格(「Data」)。Name&「!」 &rng.Address(True,True,xlR1C1,True)' –

+0

感謝您的建議,但仍然收到相同的錯誤。 – user3737057

+0

我測試了代碼,你的代碼適合我。雖然我不贊成你如何找到最後一行和最後一列。 '表格(「數據」),單元格(RowCount,ColCount)'。如果A欄中有一個空白單元格,那麼你的行數將會減少。我會建議使用[This](http://stackoverflow.com/questions/11169445/error-in-finding-last-used-cell-in-vba)找到最後一行和最後一列來構建你的範圍 –

回答

0

經過幾個小時的調查,我找不出在我的文件中導致錯誤的原因。我結束了使用替代.PivotCache.SourceData = rng.Address(True, True, xlR1C1, True)這是Sheets(PivotSht).PivotTableWizard SourceType:=xlDatabase, SourceData:=rng。爲了使用這種方法,您必須在所選數據透視表中選擇一個單元格。爲了解決這個問題,您可以使用Sheets(PivotSht).PivotTables(PivotNme).TableRange2.Cells(1).Address找到數據透視表的左上角單元格。我的完整代碼如下,它引用了「靜態」表單,這是我列出的所有數據透視表名稱和表單的地方。 (另請參閱Siddharth Rout提供的有關更好找到數據範圍的評論)。

Sub CurrentPeriodPivots() 

Dim RowCount As Integer 
Dim ColCount As Integer 
Dim rng As Range 
Dim CurrentPeriod As String 
Dim PivotList As Variant 
Dim Piv As String 
Dim PivotSht As String 
Dim PivotNme As String 
Dim PivotLoc As String 

RowCount = WorksheetFunction.CountA(Sheets("Data").Range("A:A")) 
ColCount = WorksheetFunction.CountA(Sheets("Data").Range("1:1")) 

Set rng = Sheets("Data").Range(Sheets("Data").Cells(1, 1), Sheets("Data").Cells(RowCount, ColCount)) 

CurrentPeriod = Sheets("Static").Range("CurrentPeriod") 

For i = 8 To 9 
    PivotSht = Sheets("Static").Cells(i, 1).Value 
    PivotNme = Sheets("Static").Cells(i, 2).Value 
    PivotLoc = Sheets(PivotSht).PivotTables(PivotNme).TableRange2.Cells(1).Address 
    Sheets(PivotSht).Select 
    Range(PivotLoc).Select 
    Sheets(PivotSht).PivotTableWizard SourceType:=xlDatabase, SourceData:=rng 
    Sheets(PivotSht).PivotTables(PivotNme).PivotFields("Period_id").CurrentPage = CurrentPeriod 
    Sheets(PivotSht).PivotTables(PivotNme).PivotCache.Refresh 
Next i 


For i = 10 To 16 
    PivotSht = Sheets("Static").Cells(i, 1).Value 
    PivotNme = Sheets("Static").Cells(i, 2).Value 
    PivotLoc = Sheets(PivotSht).PivotTables(PivotNme).TableRange2.Cells(1).Address 
    Sheets(PivotSht).Select 
    Range(PivotLoc).Select 
    Sheets(PivotSht).PivotTableWizard SourceType:=xlDatabase, SourceData:=rng 
    Sheets(PivotSht).PivotTables(PivotNme).PivotCache.Refresh 
Next i 


End Sub 
相關問題