Как правильно вызвать значение из динамического массива? - Excel VBA - PullRequest
1 голос
/ 17 мая 2019

Я пытаюсь вызвать значение из динамического массива для последующего использования в функции VBA, но я не могу вызвать его без выброса массива.Что здесь не так?

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

Dim lastColumn As Integer
Dim defaultWidth As Double

defaultWidth = 8.11
lastColumn = 30

'Declare array for column width
Dim widthArray() As Double 
ReDim widthArray(lastColumn)

For c = 1 To lastColumn
    widthArray(c) = defaultWidth
Next c

MsgBox (widthArray(c)) ' error is thrown here

Там написано

"индексвне диапазона. "

1 Ответ

1 голос
/ 17 мая 2019

Первое, что нужно отметить, вы на самом деле не заполняете первый элемент массива или widthArray(0).То есть, если вы не указали Option Base 1.

Во-вторых, если вы проверите значение c после завершения цикла, вы увидите, что оно на самом деле 31.Это связано с тем, что из документации For...Next:

После выполнения всех операторов в цикле step добавляется к counter .На этом этапе либо операторы в цикле выполняются снова (на основе того же теста, который вызвал выполнение цикла изначально), либо цикл завершается, и выполнение продолжается с оператором, следующим за оператором Next.

В этом случае c увеличивается до 31, но цикл завершается.Таким образом, вы получите

Ошибка индекса вне диапазона.

Не уверен, что именно вы хотите сделать, но вы можете использовать Ubound возможно:

MsgBox widthArray(Ubound(widthArray)) ' no outer parentheses
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...