Vba 获取运行时错误erro 9,下标超出范围
我在创建图表时遇到此运行时错误9,在Excel VBA 2003中下标超出范围 在代码的某个地方,Vba 获取运行时错误erro 9,下标超出范围,vba,excel,vb6,Vba,Excel,Vb6,我在创建图表时遇到此运行时错误9,在Excel VBA 2003中下标超出范围 在代码的某个地方,公共颜色作为变体和 “分配图表颜色” Chrt_color=数组(4,7,9,10,11,12,13,14,17,18,21,22,23,3,43,51,50,39,47,52,56) 公共子标签\u创建\u图表5(ByRef wksht作为Excel.Worksheet) 作为整数的Dim i 作为整数的Dim j Dim iTemp作为整数 Dim cht_Num作为整数 Dim iTextBo
公共颜色作为变体
和“分配图表颜色”
Chrt_color=数组(4,7,9,10,11,12,13,14,17,18,21,22,23,3,43,51,50,39,47,52,56)
公共子标签\u创建\u图表5(ByRef wksht作为Excel.Worksheet)
作为整数的Dim i
作为整数的Dim j
Dim iTemp作为整数
Dim cht_Num作为整数
Dim iTextBoxLoc为整数
将dbTemp设置为双精度
Dim vSeriesValue作为变量
Dim dbSeriesLastValue()为双精度
Application.ScreenUpdating=False
cht_Num=5
wksht.ChartObjects(“图表5”)。激活
wksht.ChartObjects(“图表5”)。选择
当ActiveChart.TextBox.Count>0时执行此操作
ActiveChart.TextBox(1).删除
环
如果ActiveChart.SeriesCollection.Count<1,则转到Sub_end
将DberiesSlastValue(1到ActiveChart.SeriesCollection.Count)重拨为双精度
将ReDim iSeries索引(1到ActiveChart.SeriesCollection.Count)作为整数
对于ActiveChart.SeriesCollection.Count的i=1
vSeriesValues=ActiveChart.SeriesCollection(i).Values
如果wksht.范围(“AJ”和(i+52)).Value=“是”或_
(prdName=”“和InStr(wksht.Range(“A”和(i+52))值,corpName)>2)然后
ActiveChart.SeriesCollection(i).Border.ColorIndex=5
wksht.范围(“Z”和(i+52)和“:AH”和(i+52))。Font.ColorIndex=5
其他的
ActiveChart.SeriesCollection(i).Border.ColorIndex=Chrt\u color(i)
wksht.Range(“Z”和(i+52)和“:AH”和(i+52)).Font.ColorIndex=Chrt_color(i)
如果结束
dbSeriesLastValue(i)=vSeriesValues(UBound(vSeriesValues,1))
指数(i)=i
iTextBoxLoc=12+202*(1-(vSeriesValue(UBound(vSeriesValue,1))/(ActiveChart.Axes(xlValue).MaximumScale-ActiveChart.Axes(xlValue).MinimumScale)))
使用ActiveChart.textboxs.Add(195,iTextBoxLoc,100,13)
.AutoSize=True
.Text=ActiveChart.SeriesCollection(i).Name
使用.Font
.Name=“Arial”
.尺寸=7
.ColorIndex=ActiveChart.SeriesCollection(i).Border.ColorIndex
以
以
接下来我
对于i=1到(ActiveChart.SeriesCollection.Count-1)
对于j=i+1到ActiveChart.SeriesCollection.Count
如果dbSeriesLastValue(j)
我在ActiveChart.SeriesCollection(I).Border.ColorIndex=Chrt\u color(I)
当错误发生时,ActiveChart.SeriesCollection(i).Border.ColorIndex=-4105
的值也显示在中间窗口中
请帮忙 当您收到错误消息时,我会查看I的值。您的代码从i迭代到序列号。假设你有比Chtr_颜色元素更多的系列,那么Chtr_颜色(i)的评估就不会超出这个范围
另一个问题可能是序列索引从1变为N,而数组索引从0变为N-1。查看原始问题和注释,一切看起来都很完美。我有几个建议和问题: 似乎ActiveChart.SeriesCollection不包含元素 1.你不确定吗?您没有在手表窗口中登记吗? *'分配图表颜色Chrt_color=Array(4,7,9,10,11,12,13,14,17,18,21,22,23,3,43,51,50,39,47,52,56)*
2.这很可能不是原因,但请检查单引号是否处于活动状态,如果处于活动状态,则此行将被注释掉,从而使数组变为空。是否尝试单步执行代码?错误消息表示您试图使用不可用的数组索引。是的,我有,它在
ActiveChart.SeriesCollection(I).Border.ColorIndex=Chrt\u color(I)
。那么I
是否是Chrt\u color
的有效索引?如果是这样的话,Chrt\u colo(i)
是否是colordex
集合的有效索引?Chrt\u color=Array(4,7,9,10,11,12,13,14,17,18,21,22,23,3,43,51,50,39,47,52,56)
我如何检查它是否是colordex集合的有效索引?我是VBA新手,正在运行其他人的代码。发生错误时,I=21。此外,我还尝试将数组的大小增加到25个元素,但仍然不起作用。56是一个合法值,似乎ActiveChart.SeriesCollection不包含元素。在那里,通过更改输入输出数据解决了问题。谢谢大家的帮助!
Public Sub label_creation_Chart5(ByRef wksht As Excel.Worksheet)
Dim i As Integer
Dim j As Integer
Dim iTemp As Integer
Dim cht_Num As Integer
Dim iTextBoxLoc As Integer
Dim dbTemp As Double
Dim vSeriesValues As Variant
Dim dbSeriesLastValue() As Double
Application.ScreenUpdating = False
cht_Num = 5
wksht.ChartObjects("Chart 5").Activate
wksht.ChartObjects("Chart 5").Select
Do While ActiveChart.TextBoxes.Count > 0
ActiveChart.TextBoxes(1).Delete
Loop
If ActiveChart.SeriesCollection.Count < 1 Then GoTo Sub_end
ReDim dbSeriesLastValue(1 To ActiveChart.SeriesCollection.Count) As Double
ReDim iSeriesIndex(1 To ActiveChart.SeriesCollection.Count) As Integer
For i = 1 To ActiveChart.SeriesCollection.Count
vSeriesValues = ActiveChart.SeriesCollection(i).Values
If wksht.Range("AJ" & (i + 52)).Value = "Yes" Or _
(prdName = "" And InStr(wksht.Range("A" & (i + 52)).Value, corpName) > 2) Then
ActiveChart.SeriesCollection(i).Border.ColorIndex = 5
wksht.Range("Z" & (i + 52) & ":AH" & (i + 52)).Font.ColorIndex = 5
Else
ActiveChart.SeriesCollection(i).Border.ColorIndex = Chrt_color(i)
wksht.Range("Z" & (i + 52) & ":AH" & (i + 52)).Font.ColorIndex = Chrt_color(i)
End If
dbSeriesLastValue(i) = vSeriesValues(UBound(vSeriesValues, 1))
iSeriesIndex(i) = i
iTextBoxLoc = 12 + 202 * (1 - (vSeriesValues(UBound(vSeriesValues, 1)) / (ActiveChart.Axes(xlValue).MaximumScale - ActiveChart.Axes(xlValue).MinimumScale)))
With ActiveChart.TextBoxes.Add(195, iTextBoxLoc, 100, 13)
.AutoSize = True
.Text = ActiveChart.SeriesCollection(i).Name
With .Font
.Name = "Arial"
.Size = 7
.ColorIndex = ActiveChart.SeriesCollection(i).Border.ColorIndex
End With
End With
Next i
For i = 1 To (ActiveChart.SeriesCollection.Count - 1)
For j = i + 1 To ActiveChart.SeriesCollection.Count
If dbSeriesLastValue(j) < dbSeriesLastValue(i) Then
dbTemp = dbSeriesLastValue(j)
dbSeriesLastValue(j) = dbSeriesLastValue(i)
dbSeriesLastValue(i) = dbTemp
iTemp = iSeriesIndex(j)
iSeriesIndex(j) = iSeriesIndex(i)
iSeriesIndex(i) = iTemp
End If
Next j
Next i