2017-04-06 16 views
1

新しいタブでピボットテーブルを作成するVBAを作成しようとしています。コードを実行すると、ピボットテーブルキャッシュを作成するときにタイプの不一致エラーが発生します。VBAピボットテーブル

コードは、任意の助けがうまくいけばそれで新鮮な表情が私は

Sub makeAPivotTable() 

    Dim sSheet, sSheet2 As Worksheet 'sSheet is where the data is, sSheet2 is where the pivot will be built 
    Dim cCache As PivotCache 
    Dim ptTable As PivotTable 
    Dim rRange As Range 
    Dim rLastRow, cLastColumn As Long 

    ' Insert the new sheet for the pivot table to reside 
    Application.DisplayAlerts = False 
    Sheets.Add Before:=ActiveSheet 
    ActiveSheet.name = "PivotTable" 
    Application.DisplayAlerts = True 
    Set sSheet2 = Worksheets("PivotTable") 
    Set sSheet = Worksheets("Interactions db") 

    ' define the range (the data that you want to put into the pivot table 
    rLastRow = sSheet.Cells(Rows.Count, 1).End(xlUp).Row 
    cLastColumn = sSheet.Cells(1, Columns.Count).End(xlToLeft).Column 
    Set rRange = sSheet.Cells(1, 1).Resize(rLastRow, cLastColumn) 

    ' create the cache for the pivot table 
    Set cCache = ActiveWorkbook.PivotCaches.Create _ 
    (SourceType:=xlDatabase, SourceData:=rRange). _ 
    CreatePivotTable(TableDestination:=sSheet2.Cells(2, 2), _ 
    TableName:="SalesPivotTable") 


    ' insert the blank table 
    Set ptTable = cCache.CreatePivotTable _ 
     (TableDestination:=sSheet2.Cells(1, 1), TableName:="SalesPivotTable") 


    'Insert Row Fields 
    With ActiveSheet.PivotTables("SalesPivotTable").PivotFields("customer") 
    .Orientation = xlRowField 
    .Position = 1 
    End With 


    'Insert Column Fields 
    'With ActiveSheet.PivotTables("SalesPivotTable").PivotFields("Interaction Type") 
    '.Orientation = xlColumnField 
    '.Position = 1 
    'End With 

    'Insert Data Field 
    With ActiveSheet.PivotTables("SalesPivotTable").PivotFields("interactionType") 
    .Orientation = xlDataField 
    .Position = 1 
    .Function = xlSum 
    .NumberFormat = "#,##0" 
    .name = "Person " 
    End With 


    ' do some formatting 






End Sub 

答えて

2

は(コメントとしてコード内の説明)以下のコードを試してみて行方不明です何を見つけることができます...いただければ幸い、以下の通りです

Option Explicit 

Sub makeAPivotTable() 

    Dim sSheet As Worksheet, sSheet2 As Worksheet ' sSheet is where the data is, sSheet2 is where the pivot will be built 
    Dim cCache As PivotCache 
    Dim ptTable As PivotTable 
    Dim rRange As Range 
    Dim rLastRow As Long, cLastColumn As Long ' need to define each one as Long, otherwise the first one is Variant 

    ' Insert the new sheet for the pivot table to reside 
    Application.DisplayAlerts = False 

    ' 2 lines below are shorter version to create a new sheet, 
    ' assign it to sSheet2 , and name it "PivotTable" 
    On Error Resume Next 
    Set sSheet2 = Sheets("PivotTable") '<-- try to set the Sheet (already created in past code runs) 
    On Error GoTo 0 

    If sSheet2 Is Nothing Then '<-- sheet does not exist yet >> Add it 
     Set sSheet2 = Sheets.Add(Before:=ActiveSheet) 
     sSheet2.Name = "PivotTable" 
    End If 

    Application.DisplayAlerts = True 

    Set sSheet = Worksheets("Interactions db") 

    ' define the range (the data that you want to put into the pivot table 
    With sSheet 
     rLastRow = .Cells(.Rows.Count, 1).End(xlUp).Row 
     cLastColumn = .Cells(1, .Columns.Count).End(xlToLeft).Column 
     Set rRange = .Cells(1, 1).Resize(rLastRow, cLastColumn) 
    End With 

    ' create the cache for the pivot table ***** THIS is the CORRECT Syntax 
    Set cCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=rRange) 

    ' CREATE a NEW Pivot Table in sSheet2 sheet 
    Set ptTable = sSheet2.PivotTables.Add(PivotCache:=cCache, TableDestination:=sSheet2.Range("A1"), TableName:="SalesPivotTable") 

    With ptTable 
     'Insert Row Fields 
     With .PivotFields("customer") 
      .Orientation = xlRowField 
      .Position = 1 
     End With 

     'Insert Column Fields 
     'With ActiveSheet.PivotTables("SalesPivotTable").PivotFields("Interaction Type") 
     '.Orientation = xlColumnField 
     '.Position = 1 
     'End With 

     'Insert Data Field 
     With .PivotFields("interactionType") 
      .Orientation = xlDataField 
      .Position = 1 
      .Function = xlSum 
      .NumberFormat = "#,##0" 
      .Name = "Person " 
     End With 

     ' do some formatting 
    End With 

End Sub 
+0

私は間違っていないよ場合、それはこのようにする必要があります - セットptTable = sSheet2.PivotTables.Add(PivotCache:= ccacheの、TableDestination:= sSheet2.Range( "A1")、テーブル名:= "SalesPivotTable") – sktneer

+0

もそうでなければピボット・キャッシュを削除するために、最初にsSheet2を削除することが重要ですeコードが実行されると、同じ名前の2枚のシートを持つことができず、新しいピボット・キャッシュも作成され、不要に番号が増えるため、エラーが発生します。ワークブック内のピボット・キャッシュのサイズ、したがってファイルのサイズ。 – sktneer

+0

@synneerあなたが正しいですが、エラー処理の可能性はたくさんありますが、まずPOがコード内の重大なエラーを解決する必要があると思います。しかし、あなたの推薦のために私はそれを(別の方法で)追加しました –

関連する問題