Excel VBA - подзаголовок вне диапазона с одномерным массивом

Это очень простая проблема, но я уже несколько часов ломаю голову против нее. Я пытаюсь сделать следующее:

  • определить массив VBA из именованного диапазона в моей таблице
  • Доступ к элементу в этом массиве

Теперь, если именованный диапазон охватывает многомерную область (строки и столбцы), тогда это отлично работает:

foobar = Range("two_dimensional_range")
MsgBox foobar(1,1)

Однако, если именованный диапазон состоит из одного измерения (всего лишь столбца) данных, тогда это вызывает ошибку "Подстрока вне диапазона":

foobar = Range("one_dimensional_range")
MsgBox foobar(1)

Я проверил, что foobar - это действительно массив. Я могу перебирать его с помощью "Для каждого...". Если я вызываю Ubound (foobar), тогда он дает мне правильный размер. Я просто не могу получить доступ к одному его элементу напрямую!

Что я делаю неправильно?

1 ответ

Когда вы назначаете диапазон (не одну ячейку) для варианта массива, он всегда будет многомерным массивом, поэтому этот Mobgox foobar (1,1) будет по-прежнему работать во втором экземпляре.

См. этот пример

Option Explicit
Sub Sample()
 Dim Ar As Variant
 Ar = Range("A1:A2")
 Debug.Print Ar(1, 1)
 Debug.Print Ar(2, 1)
End Sub

Другой пример

Option Explicit
Sub Sample()
 Dim Ar As Variant
 Ar = Range("A1:B2")
 '~~> Get Values from Col A
 Debug.Print Ar(1, 1)
 Debug.Print Ar(2, 1)
 '~~> Get Values from Col B
 Debug.Print Ar(1, 2)
 Debug.Print Ar(2, 2)
End Sub

licensed under cc by-sa 3.0 with attribution.