Третий способ основан на предположении, что массив в любом своем измерении имеет элементы [0…x], либо вовсе не имеет измерений (динамический до вызова «ReDim …»):
Option Explicit
Dim not_arr
Dim arr1(2,3,5,1,7)
Dim arr2()
Dim arr3
arr3 = Array(1, 2.3, "45", Array("еще", 1))
WScript.Echo "Число измерений для массивов:"
WScript.Echo " arr1(2,3,5,1,7) :" & ArrayDims(arr1)
WScript.Echo " arr2() :" & ArrayDims(arr2)
WScript.Echo " arr3() :" & ArrayDims(arr3)
WScript.Echo " not_arr :" & ArrayDims(not_arr)
WScript.Quit 0
'=============================================================================
'=============================================================================
'Возвращает число измерений массива
'=============================================================================
Function ArrayDims(arr)
Dim nElCount, i, nCurElCount
If Not IsArray(arr) Then
ArrayDims = -1 'Не массив - индикатор ошибки
Exit Function
End If
nElCount = 0
For Each i In arr 'Всего элементов в массиве
nElCount = nElCount + 1
Next
If nElCount = 0 then
ArrayDims = 0 'Динамический, не определен
Exit Function
End If
ArrayDims = 1
nCurElCount = UBound(arr, 1) + 1
While nElCount > nCurElCount
ArrayDims = ArrayDims + 1
nCurElCount = 1
For i = 1 To ArrayDims
nCurElCount = nCurElCount * (UBound(arr, i) + 1)
Next
Wend
End Function
'=============================================================================
Функция возвращает:
* число размерностей массива, указанного аргументом функции;
* «0» — если размерности массива ещё не заданы;
* «-1» в случае, если переданный аргумент не является массивом.
Автор идеи — jite.