2017-08-23 1 views
1

VBAを使用してExcelでピボットを作成しようとしていますが、このコードが機能していない理由を理解できません。何のエラーも発生していません。ピボットテーブルが作成されていないだけです。私はこの全く同じコードを他のプログラムで問題なく使用しました(明らかにローカル変数を置き換えます)。私はすでにソースデータが正しく定義されていることを確認しました。私の唯一の唯一のリードは、ピボットキャッシュの作成を実行した後、PvtCache = Nothingであることを示しています。PivotCacheが正しく動作するようにする方法は?

Option Explicit 
Sub Create_Report() 

Dim sht_Break_Data As Worksheet 
Dim sht_Num_Breaks_Pvt As Worksheet 

Dim tab_name As String 
Dim lrow_Src As Long 
Dim lcol_Src As Long 

Dim rng_Pvt_Source As Range 
Dim PvtStart As Range 
Dim PvtCache As PivotCache 
Dim Pvt As PivotTable 
Dim PvtField As PivotField 
Dim PvtName As String 

    Set_Global_Variables 

    'Get last row and column of Source Data Tab 
    With sht_Source_Data 
     lrow_Src = .Cells(Cells.Rows.Count, 1).End(xlUp).Row 
     lcol_Src = .Cells(1, Cells.Columns.Count).End(xlToLeft).Column 

    'Set source data range for pivots 
     Set rng_Pvt_Source = .Range(.Cells(1, 1), .Cells(lrow_Src, lcol_Src)) 
    End With 

'=======================================Create Pivot for Number of Breaks===========================================' 
    'Create sheet for Number of Breaks Pivot 
    'If the given tab name already exists, contents are deleted. If not, it is created 
    With ThisWorkbook 
     tab_name = "Num of Breaks Pivot" 
     If SheetExists(tab_name, ThisWorkbook) = True Then 
      Set sht_Num_Breaks_Pvt = .Sheets(tab_name) 
      On Error Resume Next 
      sht_Num_Breaks_Pvt.ShowAllData 'clear any active filter 
      sht_Num_Breaks_Pvt.Cells.Delete 'delete content 
      Else 
      .Sheets.Add(After:=.Sheets(.Sheets.Count)).Name = tab_name 'add new tab to the end 
      Set sht_Num_Breaks_Pvt = .Sheets(tab_name) 
     End If 

     'Define pivot start location 
     Set PvtStart = sht_Num_Breaks_Pvt.Cells(2, 1) 

     'Create Pivot Cache from Source Data 
     Set PvtCache = .PivotCaches.Create(_ 
      SourceType:=xlDatabase, _ 
      SourceData:=rng_Pvt_Source) 

     'Create Pivot table from Pivot cache 
     Set Pvt = PvtCache.CreatePivotTable(_ 
      TableDestination:=PvtStart, _ 
      TableName:="test") 
    End With 

End Sub 
+0

ちょうど勘違い:F8を使用してコードを1行ずつステップし、sht_Num_Breaks_Pvtがあなたが思うシートに設定されていることを確認します。 – jeffreyweir

+0

既にシートの名前を印刷してチェックされていますが、それは正しいです。 – kschindl

+0

よろしいですか?これをルーチンの最後に追加して、何が起きたかについて返信することはできますか? msgbox pvt.parent.name& ""&pvt.name – jeffreyweir

答えて

0

どのような意味があるとしても、上記のコードは動作しませんでした。だから、私はちょうどレコーダーを使用し、出力を変更することに決めました。

'Create pivot for Breaks w/o Remedies >30 days 
    .PivotCaches.Create(SourceType:=xlDatabase, SourceData:= _ 
     rng_rmdy_GT30.Address(, , xlR1C1, True), Version:=xlPivotTableVersion14). _ 
     CreatePivotTable TableDestination:=sht_rmdyGT30_Pivot.Cells(2, 1), _ 
     TableName:="PivotTable1", DefaultVersion:=xlPivotTableVersion14 
    sht_rmdyGT30_Pivot.Activate 
    Set Pvt = ActiveSheet.PivotTables("PivotTable1") 

奇妙なことに、R1C1形式のソースデータ範囲を持たないと、このコードも破損しています。

関連する問題