我已经调整了一段代码,用于根据工作簿中可以着色的单元格为几个饼图(以及其中的切片)着色。
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这没有改变错误。连接中的错误是否是另一个子(生成饼图的那一块(因为这个子只是着色它们?)soembody可以提出任何建议吗?
答案 0 :(得分:1)
下标超出范围(运行时错误9)
我应该提到错误是在行中设置rngColors = ThisWorkbook.Sheets(“colors”)。范围(“A1:C1”)。偏移量(y_off,0)你可以查看下面我的评论(答案)。我真的不知道是什么引起了这个错误 - Johannes Graulich 9小时前
我能想到的两个原因
您没有名称为“Colors”的工作表
如果您直观地看到名为“Colors”的工作表,请检查名称中是否有前导或尾随空格。您可以双击选项卡中的工作表名称,然后选中或者可以激活该工作表,然后使用
Debug.print Len(Activesheet.Name)
在程序中或使用下面的立即窗口中检查
?Len(Activesheet.Name)
如果你得到超过5,那就意味着你有一个前导空格或尾随空格。
答案 1 :(得分:0)
您的代码正在访问
rngColors.Cells(x)
其中x
从1循环到系列中的点数。
您的范围只有y_off
个单元格。
因此,如果任何系列的点数超过y_off
,您将获得超出范围错误的下标。
取出调试器!