excelvba';dim作为变量';韩元';不允许';每个';循环
我的代码有点麻烦。我试图删除占用同一合并单元格的图表,但出现错误。如果未将ScrapChart设置为variant,则代码不会为AllChartsInBox()中的每个ScrapChart编译excelvba';dim作为变量';韩元';不允许';每个';循环,excel,vba,charts,foreach,Excel,Vba,Charts,Foreach,我的代码有点麻烦。我试图删除占用同一合并单元格的图表,但出现错误。如果未将ScrapChart设置为variant,则代码不会为AllChartsInBox()中的每个ScrapChart编译,但如果尝试运行ScrapChart,则会出现运行时错误91。删除 为什么必须将Scrapchart设置为变体,但是SheetChart在Ws_Charts.ChartObjects中的每个SheetChart的循环中都可以正常工作,如果它被设置为ChartObject option explicit Di
,但如果尝试运行ScrapChart,则会出现运行时错误91。删除
为什么必须将Scrapchart设置为变体,但是SheetChart在Ws_Charts.ChartObjects中的每个SheetChart的循环中都可以正常工作,如果它被设置为ChartObject
option explicit
Dim NumberofChartsinRange, ChartBoxIndex As Long
Dim SheetChart, AllChartsInBox() As ChartObject
Dim ScrapChart As Variant
Set Chartbox = Ws_Charts.Range("A1:F6")
Ws_Charts.Cells(1,1).Formula2 = formulastring
Chartbox.Merge
Chartbox.HorizontalAlignment = xlRight
Chartbox.VerticalAlignment = xlBottom
NumberofChartsinRange = 0
If Ws_Charts.ChartObjects.Count = 0 Then
Else
ReDim AllChartsInBox(Ws_Charts.ChartObjects.Count - 1)
For Each SheetChart In Ws_Charts.ChartObjects
If Not Intersect(SheetChart.TopLeftCell, Chartbox) Is Nothing Then
NumberofChartsinRange = NumberofChartsinRange + 1
Set AllChartsInBox(ChartBoxIndex) = SheetChart: ChartBoxIndex = ChartBoxIndex + 1
End If
Next
End If
If NumberofChartsinRange > 1 Then
For Each ScrapChart In AllChartsInBox
ScrapChart.Delete
Next ScrapChart
End If
您可以通过ChartObjects集合的单个过程完成此操作:
Dim SheetChart,co作为ChartObject,ChartBox作为Range
将tmp设置为ChartObject,将foundOne设置为Boolean,将i设置为Long
Set ChartBox=Ws_charts.Range(“A1:F6”)
Ws_charts.Cells(1,1).Formula2=formulastring
图表框,合并
ChartBox.HorizontalAlignment=xlRight
ChartBox.VerticalAlignment=xlBottom
对于i=Ws_charts.ChartObjects.Count到1步骤-1
Set co=Ws_charts.ChartObjects(i)
如果不相交(co.TopLeftCell,ChartBox)则为空
如果没有找到一个,那么“找到第一个图表”?
设置tmp=co
foundOne=True
其他的
'多个图表-删除第一个图表和此图表。。。
如果不是tmp,则tmp.Delete
公司删除
如果结束
如果结束
接下来我
通常情况下,阵列上的每个
循环都不使用。更重要的是,数组的元素可能是Nothing
,因为它的元素数与Ws\u图表的元素数相同。ChartObjects
,但您可能没有将所有ChartObject添加到数组中。同样重要的是:您需要重复变量类型,否则它是Variant
:Dim NumberofChartsinRange,ChartBoxIndex尽可能长
等等。您正在迭代一个数组-为…下一个
循环使用一个。使用集合而不是数组可能更容易-无需担心调整大小,除非在结尾需要一个额外的End If
,这很有效。缺少的End If
在哪里?在结尾需要3个'End If'语句,在For…Next
循环期间,您打开了3个'If'语句。如果不是tmp,则tmp.Delete
是一行如果并且如果不需要结束结束…您是正确的,我没有意识到tmp.Delete和co.Delete不在同一如果中,我忘记了单行If
s