2017-04-20 107 views
0

我記錄了一個生成非常簡單的數據透視表的宏。當我播放宏時,我在PivotTable中遇到錯誤。帶有宏的Excel數據透視表

我得到:

無效的過程調用或參數

等我回去,把SourceDataTableDestination圍繞單引號。現在我得到一個數據透視表,但只有總數。這應該給我的項目的所有出現的數列A

下面的代碼

Sub testpivot() 
' 
' testpivot Macro 
' 
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
    "'GF Response Detail R'!R1C1:R65536C1", Version:= _ 
    xlPivotTableVersion10).CreatePivotTable TableDestination:= _ 
    "'GF Response Detail R'!R2C10", TableName:="PivotTable1", _ 
    DefaultVersion:=xlPivotTableVersion10 
Sheets("GF Response Detail R").Select 
Cells(2, 7).Select 
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Region") 
    .Orientation = xlRowField 
    .Position = 1 
End With 
ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable1").PivotFields("Region"), "Count of Region", xlCount 
    ActiveWorkbook.ShowPivotTableFieldList = False 

End Sub 
+0

您是否想每次創建一個新的數據透視表?因爲您可以創建一個只更新工作簿中當前包含的數據透視表的宏。使用此當前設置,您將只使用來自已定義參數的數據。所以它只會根據來自A1:A65536的輸入創建一個數據透視表,所以如果你下一次說66K行,宏將只基於原來定義的〜65K。 – BWMustang13

+0

是的。這是每個月的新報告。所以我們每次都會在新文檔上運行宏。 –

回答

2

你想從工作表中刪除數據透視表。在運行宏之前。

1

下面的代碼將首先檢查工作表中是否存在「PivotTable1」,如果存在,則會將其刪除。

之後,它將在「GF Response Detail R」表單上創建一個新的PivotTable,並在列「A」中更新數據。

代碼

Option Explicit 

Sub testpivot() 

' testpivot Macro 
Dim PivTbl  As PivotTable 
Dim PivCache As PivotCache 
Dim DataSht  As Worksheet 
Dim lastRow  As Long 
Dim SrcRng  As Range 
Dim SrcData  As String 

' set the Pivot Data 
Set DataSht = Worksheets("GF Response Detail R")  
With DataSht 
    lastRow = .Range("A" & .Rows.Count).End(xlUp).Row '<-- get last row in Column A 

    Set SrcRng = .Range("A1:A" & lastRow) '<-- set dynamic Pivot Range 
    SrcData = SrcRng.Address(True, True, xlA1, xlExternal) '<-- get the Range Address, including sheet's name 
End With  

'-- first check if there's a "PivotTable1" in sheet >> if Yes, Delete it 
For Each PivTbl In DataSht.PivotTables 
    If PivTbl.Name = "PivotTable1" Then 
     DataSht.Range(PivTbl.TableRange2.Address).Delete Shift:=xlUp 
     Exit For 
    End If 
Next PivTbl 

' set the Pivot Cache 
'Set PivCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData) 

' Option 2: set the Pivot Cache 
Set PivCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcRng) 

' Option 3: set the Pivot Cache 
Set PivCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=SrcData, Version:=xlPivotTableVersion15) 

' create a new Pivot Table in "EXP Pivot" sheet, start from Cell A1 
Set PivTbl = DataSht.PivotTables.Add(PivotCache:=PivCache, TableDestination:=DataSht.Range("J2"), TableName:="PivotTable1") 

With PivTbl 
    With .PivotFields("Region") 
     .Orientation = xlRowField 
     .Position = 1 
    End With 

    .AddDataField .PivotFields("Region"), "Count of Region", xlCount 
    ActiveWorkbook.ShowPivotTableFieldList = False 
End With 

End Sub 
+0

我得到的設置PivTbl = –

+0

「無效的過程調用或參數」 @MattWiner嘗試編輯的代碼(改變了'PivCache'線) –

+0

我嘗試了全新的丟球只有在它的列的數據。在PivTble線上仍然收到'無效的程序' –

0

這裏試試這個。這是@Shai Rado建議的細微變化。

Sub RegionMacro() 

Dim DSheet As Worksheet 
Dim PCache As PivotCache 
Dim PTable As PivotTable 
Dim PRange As Range 
Dim LastRow As Long 

'define the sheet, last row, and pivot table range 
Set DSheet = Worksheets("GF Response Detail R") 
LastRow = DSheet.Cells(Rows.Count, 1).End(xlUp).Row 
Set PRange = DSheet.Range("A1:A" & LastRow) 

'get address of range 
sData = PRange.Address(False, True) 

'check to see if the table already exist and delete it if it does 
For Each PTable In DSheet.PivotTables 
    If PTable.Name = "RegionCountTable" Then 
     DSheet.Range(PTable.TableRange2.Address).Delete Shift:=xlUp 
     Exit For 
    End If 
Next PTable 

'define the pivot cache 
Set PCache = ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=PRange) 

'insert a blank pivot table into cell G2 and call it "RegionCountTable" 
Set PTable = PCache.CreatePivotTable(TableDestination:=DSheet.Cells(2, 7), TableName:="RegionCountTable") 

'insert row fields 
With PTable 

    With ActiveSheet.PivotTables("RegionCountTable").PivotFields("Region") 
    .Orientation = xlRowField 
    .Position = 1 
    End With 

    'create a count for the region 
    .AddDataField .PivotFields("Region"), "Count of Region", xlCount 
    ActiveWorkbook.ShowPivotTableFieldList = False 
End With 


End Sub 
+0

一旦你定義了'set PTable'並有'有了PTable',你不需要'隨着ActiveSheet.PivotTables( 「RegionCountTable」)。透視字段( 「區域」)'只是使用'.PivotFields (「地區」)' –

+0

謝謝大家的幫助。很遺憾沒有取得任何進展。不知道它是我的Excel版本還是我做的完全錯誤的。我仍然得到'無效的過程調用或參數' –

+0

我得到它運行到目前爲止的唯一方法是通過添加一個新工作表(我會確定),將其設置爲活動工作表。然後設置'TableDestination:=「」',但結果只是總數'「Count of Region」「148」' –