Передача массивов ByRef, нижний индекс вне диапазона - PullRequest
1 голос
/ 09 апреля 2020

Я пытаюсь передать несколько массивов из подпрограммы Main в другую подпрограмму для загрузки. Я передаю ByRef, чтобы передать их как указатели, чтобы я мог продолжать использовать их в подпрограмме Main после их загрузки. Я также передаю словарь через загрузочный саб.

Когда я начинаю l oop через массивы в подпункте Build_Objects, я сталкиваюсь с ошибкой Subscript Out of Range и не могу понять, почему.

Мой упрощенный код:

Sub Main()

    '//Declarations
    Dim arr_data() As Variant
    Dim dict_headers As Object
    Dim arr_head1() As Variant, arr_head2() As Variant
    Dim arr_platform() As Variant


    '//Setting
    Set dict_headers = CreateObject("Scripting.Dictionary")


    'before main, build objects required
    Call Build_Objects(arr_head1, arr_head2, dict_headers, arr_platform)

    .
    .
    .

End Sub

Sub Build_Objects() sub:

Sub Build_Objects(ByRef arr_head1P As Variant, ByRef arr_head2P As Variant, ByVal dict_headP As Object, ByRef arr_plat As Variant)

    '//Declarations
    Dim i_arr As Long
    ReDim arr_plat(1 To 9, 1 To 4)


    '//Arrays
    arr_head1P = Array("First Name", "Last Name", "Email", "Phone", "Phone", "Phone", "Phone", "Zip", "Country", "DOB", "Gender")
    arr_head2P = Array("fn", "ln", "email", "Google_ph1", "FB_ph1", "Google_ph2", "FB_ph2", "POSTCODE", "COUNTRY_CODE", "CUSTOMER_DOB", "CUSTOMER_GENDER")

    '//Dictionary
    For i_arr = LBound(arr_head1P) To UBound(arr_head1P)
        dict_headP.Add arr_head2P(i_arr), arr_head1P(i_arr)
    Next i_arr

End Sub

Ошибка Subscript возникает, когда i_arr = 1 в массиве arr_head2P , Но, как вы можете видеть ниже, до того, как он войдет в For l oop, arr_headP2 будет загружен правильно, и arr_head2P(1) должен вернуть ln, не ошибка?

enter image description here

Кто-нибудь знает об этом или почему это происходит? Что я упустил? Такое ощущение, что я схожу с ума!

1 Ответ

1 голос
/ 09 апреля 2020

Здесь происходит какая-то проблема со ссылкой на память, замените Dim arr_head1 As Variant(), arr_head2 As Variant() на Dim arr_head1 As Variant, arr_head2 As Variant

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