Индекс вне диапазона ошибка с массивом - не знаю, почему?

я объявил массив как таковой Dim rArray() As Variantно когда я пытаюсь использовать значения, которые хранятся в нем (как показано ниже), я получаю индекс из ошибки диапазона. The UBound(rArray)и LBound(rArray) оба возвращают значения 14 и 1, но ошибка возникает при Debug.Print линии.

если я использую оператор For, как показано ниже

For Each rArr in rArray

тогда он работает без проблем, но для целей, которые я создаю этот массив, мне нужна гибкость, чтобы выбрать каждый элемент, хранящийся в этом порядке-то есть мне нужно ссылаться на них можно с помощью индексов.

Я пробовал несколько способов попытаться решить эту проблему без везения и потратить почти половину дня на эту проблему. Может ли кто-нибудь указать, что мне нужно изменить, чтобы это сработало.

Set rng = Range("D4", Range("D4").End(xlDown))
rng.NumberFormat = "0"
rArray = rng.Value

For x = UBound(rArray) To LBound(rArray) Step -1
    Debug.Print rArray(x)
Next x

Edit: еще один факт, заслуживающий упоминания, заключается в том, что массив объявлен и используется в функции, но не передается из функции или в функцию. Нельзя ли объявлять и использовать массивы в функциях?

1 ответов


когда вы назначаете значения листа массиву вариантов, вы всегда в конечном итоге с 2-D массив, который 1 (например, 1 то, 1 к чему-то; никогда 0 к чему-то, 0 к чему-то). Если вы получаете значения из одного столбца, второй ранг составляет всего 1 к 1.

Это можно доказать следующим образом.

Dim x As Long, rArray As Variant, rng As Range

Set rng = Range("D4", Range("D4").End(xlDown))
rng.NumberFormat = "0" 'don't really understand why this is here
rArray = rng.Value

Debug.Print LBound(rArray, 1) & ":" & UBound(rArray, 1)
Debug.Print LBound(rArray, 2) & ":" & UBound(rArray, 2)

For x = UBound(rArray, 1) To LBound(rArray, 1) Step -1
    Debug.Print rArray(x, 1)
Next x

поэтому вам нужно запросить элемент в первом ранге массива; недостаточно просто попроси стихию.