Индекс вне диапазона ошибка с массивом - не знаю, почему?
я объявил массив как таковой 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
поэтому вам нужно запросить элемент в первом ранге массива; недостаточно просто попроси стихию.