VBA - непреднамеренное создание массива в массиве - PullRequest
0 голосов
/ 05 декабря 2018

Ниже приведен фрагмент кода, который я пишу, который пытается сравнить диапазон в начале процесса (записанный в глобальном массиве в событии активации листа) с тем же диапазоном, когда лист деактивирован.

Вот код активации:

Private Sub Worksheet_Activate()

garr_Agency = Array(Range("rng_Lst_Agencies").Value2) 'rng_Lst_Agencies is a 1D column.

End Sub

А вот и деактивация:

Private Sub Worksheet_Deactivate()

Dim arr_Agency() As Variant
Dim rng_Agency As Range
Dim lng_Agencies As Long
Dim lng_i As Long

Set rng_Agency = Range("rng_Lst_Agencies")

arr_Agency = Array(rng_Agency.Value2)

lng_Agencies = rng_Agency.Cells.Count
lng_i = 1

Do Until lng_i = lng_Agencies + 1
            If arr_Agency(0)(lng_i, 1) <> garr_Agency(0)(lng_i, 1) Then 
*rest of the code*

Я бы подумал, что могу просто использовать:

If arr_Agency(lng_i, 1) <> garr_Agency(lng_i, 1) Then

но я получаю ошибку "Subscript out of range".

Зачем мне нужно добавлять дополнительные "(0)"?Из окна местных жителей выглядит так, как будто я создал массив внутри массива где-то вдоль линии, но я не понимаю, как.

Большое спасибо.

1 Ответ

0 голосов
/ 05 декабря 2018

Причина, по которой вы получаете вложенный массив, заключается в следующей строке:

arr_Agency = Array(rng_Agency.Value2)

Сделайте это вместо:

arr_Agency = rng_Agency.Value2

Это создаст одномерный массив, потому что когда выприсваивать варианту, который автоматически обрабатывается как массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...