-2

グラフの作成中に、この実行時エラー9、ExcelVBA2003の添え字が範囲外になります。

コードのどこか、Public Chrt_color As Variantそしてまた
'Assigning the chart colors Chrt_color = Array(4, 7, 9, 10, 11, 12, 13, 14, 17, 18, 21, 22, 23, 3, 43, 51, 50, 39, 47, 52, 56)

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

エラーが発生すると、中間ウィンドウにのActiveChart.SeriesCollection(i).Border.ColorIndex = Chrt_color(i) 値も表示されます。ActiveChart.SeriesCollection(i).Border.ColorIndex = -4105

助けてください!

4

2 に答える 2

1

エラー メッセージが表示されたら、i の値を調べます。あなたのコードは i からシリーズの数まで繰り返します。Chtr_color の要素よりも多くのシリーズがあるとします。その場合、Chrt_color(i) はそれ以上評価されません。

別の問題として、シリーズのインデックスが 1 から N になり、配列のインデックスが 0 から N-1 になることがあります。

于 2012-10-08T07:29:10.063 に答える
0

元の質問とコメントを見ると、すべてが完璧に見えます。私はいくつかの提案と質問があります:

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.これが理由ではない可能性がありますが、一重引用符がアクティブであるかどうかを確認してください。アクティブな場合、この行はコメント化され、配列が空になります。

于 2012-10-08T08:44:32.813 に答える