Как найти длину массива vba - PullRequest
0 голосов
/ 14 апреля 2020
Sub Test4()

Public Function GetLength(a As Variant) As Integer
   If IsEmpty(a) Then
      GetLength = 0
   Else
      GetLength = UBound(a) - LBound(a) + 1
   End If




End Function

По сути, пытаюсь найти длину двух массивов, и я немного запутался, как использовать этот код для этого. Не уверены, что разместить, где и как заставить работать без ошибок. Любая помощь будет оценена!

Ответы [ 2 ]

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

Параметр a представляет ваш массив. Функция вернет длину первого измерения массива, полученного в качестве аргумента:

Sub TestIt()
    Dim MyArray As Variant
    MyArray = Split("A,B,C,D,E,F", ",") 'create an Array of Length 6
    MsgBox GetLength(MyArray) 'Output the length of the array, "6"
End Sub

Как уже отмечалось, это может дать неожиданные результаты для двумерного массива:

[[A][B][C]
 [D][E][F]]

Это массив размером 2 на 3, поэтому GetLength сообщит вам, что длина равна 2 . Тем не менее, число элементов в массиве равно 6

(Примечание: если это используется в VBA, то использование Integer не дает никаких преимуществ вместо Long, и я бы порекомендовал вам изменить эту строку - тем более что UBound и LBound оба возвращают Long с. При слишком большом массиве вы можете получить ошибку переполнения!)

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

Вы смущены, потому что вам нужно отделить функцию от вашего сабвуфера? Вы должны вызвать эту функцию как-то так:

Sub Test4()
    Dim arr As Variant
    arr = Array(1, 2, 3)
    If IsArray(arr) Then Debug.Print GetLength(arr)
End Sub

Public Function GetLength(a As Variant) As Long
    GetLength = UBound(a) - LBound(a) + 1    
End Function

Я пропустил IsEmpty, если вы хотите всегда инициализировать arr, но отложите его, если хотите. Просто в общем, если вы не знаете, как вызывать функции и возвращать их значения. Взгляните на MS Docs .

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