Я пытаюсь получить длину массива, но получаю эту ошибку:
Требуется объект
Я делаю что-то неправильно?
Dim columns As Variant
columns = Array( _
"A", "ID", _
"D", "Name")
Debug.Print columns.Length ' Error: Object required
Я пытаюсь получить длину массива, но получаю эту ошибку:
Требуется объект
Я делаю что-то неправильно?
Dim columns As Variant
columns = Array( _
"A", "ID", _
"D", "Name")
Debug.Print columns.Length ' Error: Object required
Длина массива:
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.
функция
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.
Если вариант пуст, то будет выброшена ошибка. Пуленепробиваемый код выглядит следующим образом:
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
Попробуйте "CountA"
Dim myArray(1 to 10) as String
Dim arrayCount as String
arrayCount = Application.CountA(myArray)
Debug.Print arrayCount
Самый быстрый способ - использовать UBound
→ https://msdn.microsoft.com/en-us/library/95b8f22f%28v=vs.90%29.aspx