Option Explicit
Dim pvttbl As PivotTable, mychart As Chart, chrtrng As Range
Sub createPivotchart()
On Error Resume Next
For Each pvttbl In ThisWorkbook.Sheets(1).PivotTables
ThisWorkbook.Sheets(1).Range(pvttbl.TableRange2.Address).Delete
Next
ThisWorkbook.Sheets(1).ChartObjects.Delete
ThisWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=ThisWorkbook.Sheets(2).Range("A1").CurrentRegion.Address).CreatePivotTable tabledestination:=ThisWorkbook.Sheets(1).Range("B6"), tablename:="Pivottable1"
Set pvttbl = ThisWorkbook.Sheets(1).PivotTables("pivottable1")
With pvttbl
.PivotFields("Region").Orientation = xlRowField
.PivotFields("Category").Orientation = xlRowField
.PivotFields("product").Orientation = xlRowField
.PivotFields("Quantity").Orientation = xlDataField
End With
'Set pvttbl = Nothing
Set chrtrng = pvttbl.TableRange2
Set mychart = Charts.Add
Set mychart = mychart.Location(xlLocationAsObject, "Product")
With mychart
.SetSourceData chrtrng
.Parent.Top = ThisWorkbook.Sheets(1).Range("B6").Top
.Parent.Width = ThisWorkbook.Sheets(1).Range("B6:M6").Width
.Parent.Height = ThisWorkbook.Sheets(1).Range("B7:B24").Height
.Parent.Left = ThisWorkbook.Sheets(1).Range("B7").Left
.PlotArea.Format.Fill.Visible = msoTrue
.PlotArea.Format.Fill.TwoColorGradient msoGradientVertical, 1
.PlotArea.Format.Fill.ForeColor.RGB = RGB(255, 51, 0)
.PlotArea.Format.Fill.BackColor.RGB = RGB(72, 80, 255)
.PlotArea.Format.Fill.GradientStops(1).Position = 0.1
.PlotArea.Format.Fill.GradientStops(2).Position = 0.9
.ChartArea.Format.Fill.Visible = msoTrue
.ChartArea.Format.Fill.TwoColorGradient msoGradientVertical, 1
.ChartArea.Format.Fill.ForeColor.RGB = RGB(255, 51, 0)
.ChartArea.Format.Fill.BackColor.RGB = RGB(72, 80, 255)
.ChartArea.Format.Fill.GradientStops(1).Position = 0.1
.ChartArea.Format.Fill.GradientStops(2).Position = 0.9
.HasTitle = True
.ChartTitle.Caption = "Total Quantity"
.HasLegend = False
.SeriesCollection(1).Interior.Color = RGB(135, 220, 55)
End With
End Sub
Download Chart