Преобразовать диапазон в массив - PullRequest
0 голосов
/ 22 ноября 2018

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

Sub test1()
    Dim Arr() As Variant
    Arr= Range("A1:A10")

    MsgBox Arr(0)

End Sub

Sub test1()
    Dim Arr As Variant
    Arr= Range("A1:A10").Value

    MsgBox Arr(0)

End Sub

1 Ответ

0 голосов
/ 22 ноября 2018

EDITED для ясности в свете приведенных ниже комментариев.

Присвоение значения диапазона переменной Variant приведет к тому, что переменная, содержащая двумерный массив вариантов с одним индексом, будет проиндексирована.по строке и столбцу (в указанном порядке) или содержащие фактическое значение диапазона, если это диапазон из 1 ячейки.

В вашем конкретном случае это будет работать:

Sub test1()
    Dim Arr As Variant
    Dim row As Long
    Dim col As Long

    row = 1
    col = 1

    Arr = Range("A1:A10").Value

    MsgBox Arr(row, col)
End Sub

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

Sub test2()
    Dim rng As Range
    Dim Arr As Variant
    Dim row As Integer
    Dim col As Integer

    row = 1
    col = 1

    Set rng = Range("A1:A1") '<== 1 cell only!

    Arr = rng.Value

    'Ensure we're dealing with an array even in this case.
    If Not IsArray(Arr) Then
        ReDim Arr(1 To 1, 1 To 1) As Variant
        Arr(1, 1) = rng.Value
    End If

    MsgBox Arr(row, col)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...