Всем здравствуйте!
Вопрос такого плана почему в приведенном ниже коде вылетает ошибка "Subscript out of range"?
Код |
---|
Public Sub UnikArt2()
Dim IskArt, i As Long, j As Long, ArrayCount As Long
Dim Addr, rRng(), rRng2()
Dim Doc() As String
ReDim rRng(1 To Range("data[Artikul]" ;) .Count)
ReDim rRng2(1 To Range("data[Doc]" ;) .Count)
rRng = Worksheets("Data" ;) .Range("data[Artikul]" ;) .Value
rRng2 = Worksheets("Data" ;) .Range("data[Doc]" ;) .Value
ReDim Preserve Doc(1 To ArrayCount)
If Err Then Exit Sub
With CreateObject("Scripting.Dictionary" ;)
.CompareMode = vbTextCompare
For Each iDoc In Doc ' массив Doc определяется и заполняется раньше, с ним проблем нет
For j = 1 To UBound(rRng2)
If rRng2(j) = iDoc And Trim(rRng2(j)) <> "" And _
Trim(rRng(j)) <> IskArt Then
.Item(Trim(rRng(j))) = .Item(Trim(rRng(j))) + 1
End If
Next j
Next iDoc
End With
End Sub |
Массив rRng и rRng2 равны по кол-ву элементов. Если заменить rRng(j) и rRng2(j) на переменные такого вида rRng(j, 1) и rRng2(j, 1) то ошибка пропадает и программа нормально все считает.
Если ставить прерывания и смотреть массив, то Watch показывает каждый элемент массива rRng и rRng2 в следующем виде:
rRng(1)----> rRng(1,1)=74744 (стрелочка означает "+", который горит рядом с rRng(1) и если на него нажать то отобразится rRng(1,1)
Как я понимаю, rRng(j) и rRng(j,1) это различные виды записи одномерного массива.
Подскажите в чем я ошибаюсь