
Итак, я в основном использую Java и C++, а VBA для меня совсем новый. Я очень озадачен тем, почему я постоянно получаю ошибку 9 - "Index out of range". Вот код:
Dim count As Integer
Dim j As Integer
count = months.count
Dim monthsArr() As String
ReDim monthsArr(1, count)
For j = 1 To count
monthsArr(j) = months.Item(j)
Next j
Count is equal to 10 (I checked with a msgBox) and so months is an ArrayList of length 10. I'm trying to put the values of months into an array so I can use that array on an autofilter. I keep getting an error at this line:
monthsArr(j) = months.Item(j)
Я думал, что VBA использует 1-индексацию для коллекций, но я действительно не знаю. Кто-нибудь знает, почему я постоянно получаю эту ошибку? Спасибо
решение1
Вы переразмерили monthsArr
массив, чтобы он стал 2-мерным ReDim monthsArr(1, count)
. Если он должен оставаться 2-мерным массивом, то при назначении ему элементов вы также должны указать, какая часть массива находится в обоих измерениях. Вы используете только одно: monthsArr(j) = months.Item(j)
. Должно быть что-то вроде monthsArr(j,i) = months.Item(j)
где i
находится второе измерение массива.
Также обратите внимание, что первым в массиве является 0, а не 1. Поэтому, когда вы объявляете monthsArr(1,count)
, это означает, что первое измерение имеет 2 элемента/элемента, а второе измерение будет иметь count + 1 элемент.
Если предполагается, что это будет не 2-мерный, а 1-мерный массив, то следует использовать: ReDim monthsArr(count)
или ReDim monthsArr(count-1)
в качестве отсчета от 0.