0

我已经修改了一段代码,该代码旨在根据可以着色的工作簿中的单元格为几个饼图(以及其中的切片)着色。

 Sub SetColorScheme(cht As Chart, i As Long)

    Dim y_off As Long, rngColors As Range
    Dim x As Long

    y_off = i Mod 10
    'this is the range of cells which has the colors you want to apply
    Set rngColors = ThisWorkbook.Sheets("colors").Range("A1:C1").Offset(y_off, 0)

    With cht.SeriesCollection(1)
        'loop though the points and apply the corresponding fill color from the cell
        For x = 1 To .Points.Count
            .Points(x).Format.Fill.ForeColor.RGB = _
                             rngColors.Cells(x).Interior.Color
        Next x
    End With

End Sub

问题是当我尝试编译该片段时出现错误下标超出范围(运行时错误 9)。有人有什么可能导致这种行为的建议吗?我总共有 8 个饼图,所以我也尝试输入 i Mod 8 而不是 Mod 10 这并没有改变错误。连接另一个子的错误(生成饼图的部分(因为这个子只是为它们着色?)有人可以提出任何建议吗?

4

2 回答 2

1

下标超出范围(运行时错误 9)

我应该提到错误在 Set rngColors = ThisWorkbook.Sheets("colors").Range("A1:C1").Offset(y_off, 0) 你能看看我下面的评论(答案)。我真的不知道是什么导致了错误 – Johannes Graulich 9 小时前

我能想到的两个原因

  1. 您没有名为“颜色”的工作表

  2. 如果您确实看到名为“颜色”的工作表,请检查名称中是否有前导或尾随空格。您可以双击选项卡中的工作表名称,然后检查,也可以使该工作表处于活动状态,然后使用

    Debug.print Len(Activesheet.Name)

在程序中或在立即窗口中使用以下内容进行检查

?Len(Activesheet.Name)

如果你得到超过 5 个,那么这意味着你有一个前导或尾随空格。

于 2013-07-05T16:44:01.117 回答
0

您的代码正在访问

rngColors.Cells(x)

其中x从 1 循环到系列中的点数。

您的范围只有y_off单元格。

因此,如果任何系列有多个y_off点,您将得到一个下标超出范围的错误。

拿出你的调试器!

于 2013-07-04T12:34:39.550 回答