2013-07-04 88 views
0

我已經修改了一段代碼,用於根據可以着色的工作簿中的單元對幾個餅圖(以及它們中的切片)着色。下標超出範圍(運行時錯誤9)

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 

問題是,當我嘗試編譯該段時,出現錯誤Subscript超出範圍(運行時錯誤9)。有人有什麼建議可能導致這種行爲? 我總共有8個餅圖,所以我也嘗試輸入我的Mod 8,而不是Mod 10,這並沒有改變錯誤。在連接其他子(其生成餅狀圖(因爲這種子僅着色他們的作品呢?)中的錯誤可能soembody作出任何建議?

+0

我相信@Joe已經回答了您的問題。現在從一個不同的角度來看這個'當我嘗試編譯這個代碼片段時.'並且'是與另一個代碼塊相關的錯誤:編譯和執行代碼是有區別的。如果你正在使用'Debug ~~> Compile VBA Project'(COMPILING)並且你遇到錯誤,那麼是的,這個錯誤可能在其他地方。 Contd ... –

+0

如果您正在執行代碼(通過按F5或運行菜單),那麼您需要檢查哪條線路會給出錯誤。 VBA編譯與其他計算機語言編譯之間的主要區別在於,對於任何新編譯,編譯後都不會生成獨立的EXE或DLL文件。 –

+0

我應該提到,錯誤是在行Set rngColors = ThisWorkbook.Sheets(「colors」)。Range(「A1:C1」)。Offset(y_off,0)你可以看看我的評論下面回答)。我真的不知道是什麼騙取錯誤 –

回答

0

您的代碼訪問

rngColors.Cells(x) 

其中x從1循環到分的一系列數字。

你只範圍內有y_off細胞。

因此,如果任何系列擁有超過y_off點,你會得到一分腳本超出範圍錯誤。

讓你的調試器出來!

+0

好吧......這是否意味着如果我有8個圖表,每個圖表有三個部分(我想總共着色的24個切片),這意味着系列中的24個點,我將擁有哪個數字(這是一個值,他們y_off變量?它是24?而且,我是否必須相應地調整範圍?在此範圍內只有三個單元格(A1-C1) –

+0

可能有人評論我的評論請...... –

+0

@JohannesGraulich當然,我注意到你的評論是近4行長。 – Graphth

1

標超出範圍(運行時錯誤9)

我應該提到的是,誤差是在管線設置rngColors = ThisWorkbook.Sheets( 「顏色」)的範圍。( 「A1:C1」) .Offset(y_off,0)你可以看看我下面的評論(給答案)。我真的不知道什麼是cuasing錯誤 - 約翰內斯Graulich 10小時前

兩個原因,我能想到的

  1. 你不必與名稱表「顏色」

  2. 如果您在視覺上看到名爲「顏色」的圖紙,請檢查名稱中是否有前導或尾隨空格。在該選項卡您可以雙擊表名稱,然後檢查,也可以使該表激活,然後在過程中使用

    Debug.print Len(Activesheet.Name)

,或者使用下面的立即窗口檢查

?Len(Activesheet.Name) 

如果你得到5以上,那麼這意味着你有一個前導或尾隨空間。

+0

那reall工作!可以ou也許告訴我我怎麼coudl讀取範圍(這是在代碼)從工作表中的顏色出現在單獨的單元格中讀取? –

+0

您是否有固定的顏色拾取範圍或者它是動態範圍? –

相關問題