Один из способов - это рекурсивно вызвать ту же процедуру, которая проверяет, существует ли диаграмма в вашем диапазоне, и передвинуть диапазон вниз перед повторной проверкой.
Этот код проверит, охватывает ли график точно такой же диапазон, как тот, который вы пытаетесь разместить. Если второй график перекрывает первый, то он с радостью создаст новый график, только если оба графика пытаются охватить точно такой же диапазон , он попытается переместить новый график вниз.
Примечание - этот пример кода создает только контейнер диаграммы, а не сам график.
Любой код для создания chart
в chartobject
будет идти после строки ChartObjects.Add
.
Sub Test()
Add_Chart Sheet1.Range("C2:F5")
End Sub
Public Sub Add_Chart(Target As Range)
Dim oCht As ChartObject 'The chart container.
Dim bExists As Boolean 'Will be False when first created.
'Look at each chart container on the sheet.
For Each oCht In Target.Parent.ChartObjects
If oCht.TopLeftCell.Address = Target.Cells(1, 1).Address And _
oCht.BottomRightCell.Address = Target.Cells(Target.Rows.Count + 1, Target.Columns.Count + 1).Address Then
bExists = True 'The chart does exist.
Exit For 'No need to keep searching.
End If
Next oCht
If bExists Then
'Call this procedure again, but move the Target range down.
Add_Chart Target.Offset(oCht.BottomRightCell.Row - oCht.TopLeftCell.Row)
Else
Target.Parent.ChartObjects.Add _
Target.Left, Target.Top, Target.Width, Target.Height
End If
End Sub