Я использовал Shapes
для создания диаграммы только на вашем активном листе, а не для создания диаграммы.
Option Explicit
Sub AddGraphs()
Dim lr As Long, lc As Long, ch As ChartObject
lr = Cells(Rows.Count, 1).End(xlUp).Row
lc = Cells(1, Columns.Count).End(xlToLeft).Column
ActiveSheet.Shapes.AddChart.Name = "Cat" '<--- Used Shapes to keep this on the sheet only
ActiveSheet.ChartObjects("Cat").Select '<--- Naming the Chart to later call and use in Change_Event
With ActiveChart
.ChartType = xlColumnClustered
.SetSourceData Source:=Range(Cells(1, 1), Cells(lr, lc))
.Location xlLocationAsObject, "Sheet1"
.Parent.Top = Cells(1, lc + 3).Top
.Parent.Left = Cells(1, lc + 3).Left
.HasLegend = False
End With
End Sub
Теперь у вас есть график, который вы можете использовать в будущем. Вы хотите, чтобы событие изменения относилось только к обновлению ряда данных, например:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Cells(Rows.Count, 2).End(xlUp).Row = Cells(Rows.Count, 1).End(xlUp).Row Then Exit Sub
ChartObjects("Cat").Select '<--- Using named shape/chart
With ActiveChart
Dim lr As Long, lc As Long
lr = Cells(Rows.Count, 1).End(xlUp).Row
lc = Cells(1, Columns.Count).End(xlToLeft).Column
.SetSourceData Source:=Range(Cells(1, 1), Cells(lr, lc))
End With
End Sub
Edit2: Повторный пост, чтобы исправить пару других вещей, чтобы сделать эту работу.