Подтвердить что ты не робот

Получить длину массива?

Я пытаюсь получить длину массива, но получаю эту ошибку:

Требуется объект

Я делаю что-то неправильно?

Dim columns As Variant
columns = Array( _
"A", "ID", _
"D", "Name")
Debug.Print columns.Length  ' Error: Object required
4b9b3361

Ответ 1

Длина массива:

UBound(columns)-LBound(columns)+1

UBound себе UBound не лучший метод для получения длины каждого массива, поскольку массивы в VBA могут начинаться с разных индексов, например, Dim arr(2 to 10)

UBound будет возвращать правильные результаты, только если массив основан на 1 (начинает индексировать с 1, например, Dim arr(1 to 10). Он возвращает неправильные результаты в любых других обстоятельствах, например, Dim arr(10)

Подробнее о массиве VBA в этом руководстве по массиву VBA.

Ответ 2

функция

Public Function ArrayLen(arr As Variant) As Integer
    ArrayLen = UBound(arr) - LBound(arr) + 1
End Function

использование

Dim arr(1 To 3) As String  ' Array starting at 1 instead of 0: nightmare fuel
Debug.Print ArrayLen(arr)  ' Prints 3.  Everything going to be ok.

Ответ 3

Если вариант пуст, то будет выброшена ошибка. Пуленепробиваемый код выглядит следующим образом:

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

Ответ 4

Попробуйте "CountA"

Dim myArray(1 to 10) as String
Dim arrayCount as String
arrayCount = Application.CountA(myArray)
Debug.Print arrayCount