Как преобразовать аргументы динамического массива в переменную в excel vba

※ Этот вопрос является продолжением приведенной ниже проблемы

Как использовать вложенные цикл для ячейки Matrix в excel vba

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

    Dim StartrowArr, Startrow1Arr, J As Integer
    Dim flRow, dtRow As String

    Set filRng = Worksheets("Sheet1").Range("C1:C50")
    Set dtlRng = Worksheets("Sheet1").Range("F1:F50")

    For Each cell In filRng
        If cell.Value <> "" Then
            ftRow = ftRow & cell.Row & ","
        End If
    Next cell
    ftRow = Left(ftRow, Len(ftRow) - 1)
    Debug.Print ftRowNo

    For Each cell In dtlRng
        If cell.Value <> "" Then
            dtRow = dtRow & cell.Row & ","
        End If
    Next cell
    dtRow = Left(dtRow, Len(dtRow) - 1)
    Debug.Print dtRow

    StartrowArr = Array(filRowNo) ※ dynamic array args
    Startrow1Arr = Array(dtlRowNo)

но после инициализации Array(args), как указано выше, он возвращает ошибку 1004 в [Startrow1, init with 0]. Я также пробовал использовать CInt(ftRow) для преобразования типов в Integer из String. ничего не изменилось.
Более того, журнал показывает, что Startrow, Startrow1 получили значения, как показано ниже.

    Startrow: 2, 4, 7
    Startrow1: 2611 ※ should be 2, 6, 11

Однако, если я инициализирую StartrowArr = Array(2,4,7) статически. он работает идеально.
Как правильно передать аргументы в StartrowArr и Startrow1Arr.


person DIO    schedule 04.08.2017    source источник
comment
Какие аргументы mapRowNo и tcRowNo вы передаете в Array()?   -  person Tim Williams    schedule 04.08.2017


Ответы (1)


Для создания динамического массива используйте redim save .

Sub test()
    Dim StartrowArr(), Startrow1Arr(), J As Integer
    Dim flRow, dtRow As String
    Dim Cell As Range
    Dim k As Long, n As Long

    Set filRng = Worksheets("Sheet1").Range("C1:C50")
    Set dtlRng = Worksheets("Sheet1").Range("F1:F50")

    For Each Cell In filRng
        If Cell.Value <> "" Then
            'ftRow = ftRow & cell.Row & ","
             ReDim Preserve StartrowArr(k)
             StartrowArr(k) = Cell.Row
             k = k + 1
        End If
    Next Cell
    'ftRow = Left(ftRow, Len(ftRow) - 1)
    Debug.Print Join(StartrowArr, ",")

    For Each Cell In dtlRng
        If Cell.Value <> "" Then
            'dtRow = dtRow & Cell.Row & ","
             ReDim Preserve Startrow1Arr(n)
             Startrow1Arr(n) = Cell.Row
             n = n + 1
        End If
    Next Cell
    'dtRow = Left(dtRow, Len(dtRow) - 1)
    Debug.Print Join(Startrow1Arr, ",")

    'StartrowArr = Array(mapRowNo) '※ dynamic array args
    'Startrow1Arr = Array(tcRowNo)
End Sub
person Dy.Lee    schedule 04.08.2017
comment
Спасибо Дай Ли. Это было потрясающе. Отлично сработал. ‹br/›Я также пытался почти очень близко к вашему решению, но не мог правильно манипулировать своим кодом и запутался. - person DIO; 04.08.2017