循环时从 'chartobjects' 对象中删除 'chartobjects'
Removing 'chartobjects' from 'chartobjects' object while looping
我的 VBA 代码循环遍历一系列范围,并检查每个范围内是否只有一个图表,删除任何多余的图表。我想从正在循环的图表对象集合中删除我已经处理过的所有图表,如何从图表对象中删除图表对象?
这是我当前的代码。
Dim ChartsNotChecked As ChartObjects
Dim ChartsChecked As ChartObjects
Dim i As Long
Dim j As Long
Dim ChartBox As Range
Dim Char As ChartObject
Dim FirstChart As ChartObject
Dim OneFound As Boolean
Set ChartsNotChecked = ActiveSheet.ChartObjects
For j = 10 To 100 Step 10
Set ChartBox = Range(Cells(1, j - 9), Cells(10, j))
OneFound = False
For Each Char In ChartsNotChecked
If Not Intersect(Char.TopLeftCell, ChartBox) Is Nothing Then 'check if chart intersects current chartbox
If Not OneFound Then 'catches first intersecting chart automatically
Set FirstChart = Char
OneFound = True
Else
If Not FirstChart Is Nothing Then Char.Delete 'deletes any other charts
End If
End If
Next Char
'format FirstChart
'remove FirstChart from ChartsNotChecked
'add FirstChart to ChartsChecked
Next j
已编辑 - 首先将所有图表放入一个集合中,这样您就可以随时删除它们。
Sub GG()
Dim allCharts As New Collection
Dim ChartsChecked As New Collection
Dim i As Long, j As Long
Dim ChartBox As Range
Dim Char As ChartObject
Dim OneFound As Boolean, ws As Worksheet
Set ws = ActiveSheet
'make a collection of all chartobjects
For Each Char In ws.ChartObjects
allCharts.Add Char
Next Char
For j = 10 To 100 Step 10
Set ChartBox = ws.Range(ws.Cells(1, j - 9), ws.Cells(10, j))
OneFound = False
For i = allCharts.Count To 1 Step -1 'work backwards
Set Char = allCharts(i)
If Not Intersect(Char.TopLeftCell, ChartBox) Is Nothing Then 'check if chart intersects current chartbox
If Not OneFound Then 'catches first intersecting chart
OneFound = True
Else
Char.Delete 'deletes any other charts
End If
allCharts.Remove i 'remove from collection: was kept or deleted
End If
Next i
Next j
End Sub
我的 VBA 代码循环遍历一系列范围,并检查每个范围内是否只有一个图表,删除任何多余的图表。我想从正在循环的图表对象集合中删除我已经处理过的所有图表,如何从图表对象中删除图表对象?
这是我当前的代码。
Dim ChartsNotChecked As ChartObjects
Dim ChartsChecked As ChartObjects
Dim i As Long
Dim j As Long
Dim ChartBox As Range
Dim Char As ChartObject
Dim FirstChart As ChartObject
Dim OneFound As Boolean
Set ChartsNotChecked = ActiveSheet.ChartObjects
For j = 10 To 100 Step 10
Set ChartBox = Range(Cells(1, j - 9), Cells(10, j))
OneFound = False
For Each Char In ChartsNotChecked
If Not Intersect(Char.TopLeftCell, ChartBox) Is Nothing Then 'check if chart intersects current chartbox
If Not OneFound Then 'catches first intersecting chart automatically
Set FirstChart = Char
OneFound = True
Else
If Not FirstChart Is Nothing Then Char.Delete 'deletes any other charts
End If
End If
Next Char
'format FirstChart
'remove FirstChart from ChartsNotChecked
'add FirstChart to ChartsChecked
Next j
已编辑 - 首先将所有图表放入一个集合中,这样您就可以随时删除它们。
Sub GG()
Dim allCharts As New Collection
Dim ChartsChecked As New Collection
Dim i As Long, j As Long
Dim ChartBox As Range
Dim Char As ChartObject
Dim OneFound As Boolean, ws As Worksheet
Set ws = ActiveSheet
'make a collection of all chartobjects
For Each Char In ws.ChartObjects
allCharts.Add Char
Next Char
For j = 10 To 100 Step 10
Set ChartBox = ws.Range(ws.Cells(1, j - 9), ws.Cells(10, j))
OneFound = False
For i = allCharts.Count To 1 Step -1 'work backwards
Set Char = allCharts(i)
If Not Intersect(Char.TopLeftCell, ChartBox) Is Nothing Then 'check if chart intersects current chartbox
If Not OneFound Then 'catches first intersecting chart
OneFound = True
Else
Char.Delete 'deletes any other charts
End If
allCharts.Remove i 'remove from collection: was kept or deleted
End If
Next i
Next j
End Sub