2017-06-20 11 views
1

ピボットテーブルから列チャートを作成しようとしています。ピボットテーブルから列チャートを作成

マクロを記録して自分のコードからピボットテーブルを生成することができます。

マクロを記録してチャートを生成するのと同じ方法で試しましたが、混乱しました。

私は自分のコードを試しましたが、成功しません。誰もが私はピボットテーブルからグラフを生成することができる方法を提案でした、以下

は以下

Sub AutoPivot() 

Dim PvtCache   As PivotCache 
Dim PvtTbl    As PivotTable 
Dim pvtsht    As Worksheet 

' set Pivot Cache for Pivot Table 
' Your range is static, there are ways to refer to a dynamic range 
Set PvtCache = ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Preparation sheet!R1C1:R1048576C8") 

' set the Pivot table's sheet 
Set pvtsht = Worksheets("CAT_Pivot") 


' add this line in case the Pivot table doesn't exit >> first time running this Macro 
On Error Resume Next 
Set PvtTbl = pvtsht.PivotTables("PivotTable1") ' check if "PivotTable7" Pivot Table already created (in past runs of this Macro) 

On Error GoTo 0 
If PvtTbl Is Nothing Then ' Pivot table object is nothing >> create it    
    ' create a new Pivot Table in "PivotTable4" sheet 
    Set PvtTbl = pvtsht.PivotTables.Add(PivotCache:=PvtCache, TableDestination:=pvtsht.Range("A3"), TableName:="PivotTable1") 

    ActiveSheet.PivotTables("PivotTable1").AddDataField ActiveSheet.PivotTables(_ 
    "PivotTable1").PivotFields("Colour"), "Count of Colour", xlCount 

     With PvtTbl.PivotFields("Category") 
      .Orientation = xlRowField 
      .Position = 1 
     End With 
     With PvtTbl.PivotFields("Colour") 
      .Orientation = xlColumnField 
      .Position = 1 
     End With 
     With PvtTbl.PivotFields("Category") 
      .PivotItems("DG").Visible = False 
      .PivotItems("DG").Visible = False 
      .PivotItems("DG-Series").Visible = False 
      .PivotItems("gn").Visible = False 
      .PivotItems("yl").Visible = False 
      .PivotItems("(blank)").Visible = False 
     End With 
     With PvtTbl.PivotFields("Colour") 
      .PivotItems("(blank)").Visible = False 
     End With 
Else 
    ' just refresh the Pivot cache with the updated Range 
    PvtTbl.ChangePivotCache PvtCache 
    PvtTbl.RefreshTable   
End If 

End Sub 

ピボットテーブルを生成するために使用されるコードである私は、ピボットテーブルからグラフを生成するために使用され、コードです。 ChartObject.Chart.SetSourceDataを設定するために

Sub Autochart() 

    Dim chobj As ChartObject   
    Dim ch As Chart   
    Dim pvtsht As Worksheet 

    Set pvtsht = Sheets("CAT_Pivot")   
    Set chobj = pvtsht.ChartObjects.Add(300, 200, 550, 200)   
    '300 left, 220 top, 550 width, 200 height 

    Set ch = chobj.Chart   
    ch.SetSourceData pt.PvtTbl   
    ch.ChartType = xlColumn   
    chobj.Name = "EChart1" 

End Sub 

答えて

1

、あなたの希望PivotTableTableRange2に設定する必要があります。これは新しいsubですので、あなたがSub AutoPivotSetを持っPvtTblあなたはそれがこのSubで再びSetに必要なので、また

は、それは、ローカル変数を認識しません。

最終、何のチャートタイプxlColumnはありません、あなたが利用できる有効なオプション、xlColumnClusteredまたはxlColumnStackedなどsuceからいずれかを選択する必要がある、など

コード

Sub Autochart() 

Dim chtObj  As ChartObject 
Dim PvtSht  As Worksheet 
Dim PvtTbl  As PivotTable 

' set the Pivot sheet 
Set PvtSht = Sheets("CAT_Pivot") 

' set the Pivot Table object 
Set PvtTbl = PvtSht.PivotTables("PivotTable1") 

' set the Chart Object 
Set chtObj = PvtSht.ChartObjects.Add(300, 200, 550, 200) 

' modify ChartObject properties 
With chtObj 
    .Chart.SetSourceData PvtTbl.TableRange2 ' set the chart's data range to the Pivot-Table's TableRange2 
    .Chart.ChartType = xlColumnClustered 
    .Name = "EChart1" 
End With 

End Sub 
関連する問題