2016-02-14 57 views
3

我試圖讓我的陣列,以調整在我的工作簿中的張數的長度,但不斷收到VBA不能得到陣列來調整

下標越界

對於我的情況下工作表名稱是「XXXX年度」

Dim sheetsForCalendar() As Integer  

For Each Worksheet In ThisWorkbook.Sheets 
    Dim i As Integer: i = 0 
    Dim calendarYear() As String: calendarYear() = Split(CStr(Worksheet.Name)) 
    ReDim Preserve sheetsForCalendar(i) 

    If calendarYear(0) = "Year" Then 
     Dim calendarYearAsInt As Integer: calendarYearAsInt = calendarYear(1) 
     sheetsForCalendar(i) = calendarYearAsInt 
    End If 

    i = i + 1 
Next 

For Each element In sheetsForCalendar 
    MsgBox (sheetsForCalendar(element)) 
Next 
+0

我正在使用ReDim(請參見第5行),但仍然出現錯誤。 – nothing

回答

1

除了代碼中的其他問題,這在這裏是錯誤的:

For Each element In sheetsForCalendar 
    MsgBox (sheetsForCalendar(element)) 
Next 

element發生在sheetsForCalendar的值,即。例如,2015,2016,它不是索引。
可以通過for n = 0 to UBound(sheetsForCalendar)MsgBox element循環。

您應該閱讀如何單步執行代碼(F8並將光標置於變量上以查看其內容)。這將幫助你輕鬆找到你的錯誤(也就是你如何'錯誤'i馬克斯奈德指出)。

1

我認爲,問題是你設置I = 0在你的開始For Each循環,所以無論你有多少張有,使用ReDim stateme nt總是使用值0.如果您將變量i的Dim語句移到For Each語句上方,它應該會更好。 HTH