2017-06-14 132 views
0

我必須使用VBA來創建數據透視表,但我得到了以下錯誤:「運行時錯誤‘438’對象不支持此屬性或方法」這個代碼:ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ "Sheet1!R1C1:R1048576C8", Version:=6).CreatePivotTable TableDestination:= _ pivotTableWs!R1C1, tableName:=tableName, DefaultVersion:=6VBA:創建透視表

這裏完整的源

Dim tableName As String 
Dim pivotTableWs As Worksheet 

tableName = "pivotTableName" 

Set pivotTableWs = Sheets.Add(after:=Worksheets("Sheet1")) 
ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
    "Sheet1!R1C1:R1048576C8", Version:=6).CreatePivotTable TableDestination:= _ 
    pivotTableWs!R1C1, tableName:=tableName, DefaultVersion:=6 
Sheets(pivotTableWs).Select 
Cells(1, 1).Select 
With ActiveSheet.PivotTables(tableName) 
    .ColumnGrand = True 
    .HasAutoFormat = True 
    .DisplayErrorString = False 
    .DisplayNullString = True 
    .EnableDrilldown = True 
    .ErrorString = "" 
    .MergeLabels = False 
    .NullString = "" 
    .PageFieldOrder = 2 
    .PageFieldWrapCount = 0 
    .PreserveFormatting = True 
    .RowGrand = True 
    .SaveData = True 
    .PrintTitles = False 
    .RepeatItemsOnEachPrintedPage = True 
    .TotalsAnnotation = False 
    .CompactRowIndent = 1 
    .InGridDropZones = False 
    .DisplayFieldCaptions = True 
    .DisplayMemberPropertyTooltips = False 
    .DisplayContextTooltips = True 
    .ShowDrillIndicators = True 
    .PrintDrillIndicators = False 
    .AllowMultipleFilters = False 
    .SortUsingCustomLists = True 
    .FieldListSortAscending = False 
    .ShowValuesRow = False 
    .CalculatedMembersInFilters = False 
    .RowAxisLayout xlCompactRow 
End With 
With ActiveSheet.PivotTables(tableName).PivotCache 
    .RefreshOnFileOpen = False 
    .MissingItemsLimit = xlMissingItemsDefault 
End With 
ActiveSheet.PivotTables(tableName).RepeatAllLabels xlRepeatLabels 
With ActiveSheet.PivotTables(tableName).PivotFields("field1") 
    .Orientation = xlRowField 
    .Position = 1 
End With 
ActiveSheet.PivotTables(tableName).AddDataField ActiveSheet.PivotTables(_ 
    tableName).PivotFields("ticketid"), "Count of field1", xlCount 
With ActiveSheet.PivotTables(tableName).PivotFields("field2") 
    .Orientation = xlColumnField 
    .Position = 1 
End With 

我用「開發」選項卡,選擇「宏寄存器」創建此代碼,我創建的數據透視表手動

+0

更改TableDestination參數'pivotTableWs.Cells(1,1)' – Rory

+0

它的工作原理,謝謝 – Alessandro95

回答

2

我加2個對象變量PvtTbl As PivotTablePvtCache As PivotCache使代碼更加動態。

其他解釋在下面的代碼中(作爲註釋)。

代碼

Option Explicit 

Sub AutoPivot() 

Dim PvtTbl As PivotTable 
Dim PvtCache As PivotCache 

Dim PvtTblName As String 
Dim pivotTableWs As Worksheet 

PvtTblName = "pivotTableName" 

' set the worksheet object where we will create the Pivot-Table 
Set pivotTableWs = Sheets.Add(after:=Worksheets("Sheet1")) 

' set the Pivot Cache (the Range is static) 
Set PvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Sheet1!R1C1:R1048576C8") 

' create a new Pivot Table in the new created sheet 
Set PvtTbl = pivotTableWs.PivotTables.Add(PivotCache:=PvtCache, TableDestination:=pivotTableWs.Range("A1"), TableName:=PvtTblName) 

' after we set the PvtTbl object, we can easily modifty all it's properties 
With PvtTbl 
    .ColumnGrand = True 
    .HasAutoFormat = True 
    .DisplayErrorString = False 
    .DisplayNullString = True 
    .EnableDrilldown = True 
    .ErrorString = "" 
    .MergeLabels = False 
    .NullString = "" 
    .PageFieldOrder = 2 
    .PageFieldWrapCount = 0 
    .PreserveFormatting = True 
    .RowGrand = True 
    .SaveData = True 
    .PrintTitles = False 
    .RepeatItemsOnEachPrintedPage = True 
    .TotalsAnnotation = False 
    .CompactRowIndent = 1 
    .InGridDropZones = False 
    .DisplayFieldCaptions = True 
    .DisplayMemberPropertyTooltips = False 
    .DisplayContextTooltips = True 
    .ShowDrillIndicators = True 
    .PrintDrillIndicators = False 
    .AllowMultipleFilters = False 
    .SortUsingCustomLists = True 
    .FieldListSortAscending = False 
    .ShowValuesRow = False 
    .CalculatedMembersInFilters = False 
    .RowAxisLayout xlCompactRow 

    With .PivotCache 
     .RefreshOnFileOpen = False 
     .MissingItemsLimit = xlMissingItemsDefault 
    End With 

    .RepeatAllLabels xlRepeatLabels 

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

    .AddDataField .PivotFields("ticketid"), "Count of field1", xlCount 

    With .PivotFields("field2") 
     .Orientation = xlColumnField 
     .Position = 1 
    End With 

End With 

End Sub