Есть ли эквивалент C++
sizeof
функция в VBA?
Единственные отдаленно похожие функции, кажется, Ubound
а также LBound
операторы на массивах.
Dim arr(1 to 4) as integer
MsgBox Ubound(arr)
Но это не то же самое, что код на C ++:
int arr[10];
std::cout << sizeof(std::string) << "\t" << sizeof(arr);
Несколько связанных с указателем функций, которые могут использоваться в VBA: http://support.microsoft.com/kb/199824 Нет очевидного эквивалента sizeof
хоть
Для массива вы могли бы потенциально что-то сделать с VarPtr
если вы временно сделали массив на один элемент длиннее, а затем сократили его до нужного размера:
Sub foo()
Dim arr() As Integer
Dim i As Integer
ReDim arr(1 To 5)
arr(1) = 12
arr(2) = 456
arr(3) = -41
arr(4) = 17
Debug.Print VarPtr(arr(1)) & "; " & VarPtr(arr(5)) & "; " & VarPtr(arr(5)) - VarPtr(arr(1))
ReDim Preserve arr(1 To 4)
End Sub
Там будет Лен Функция но со строками это не будет работать как SizeOf
потому что он будет буквально проверять длину строки, содержащейся в строковой переменной.
Итак, чтобы проверить размер байта массива целых:
Dim arr(1 To 4) As Integer
Debug.Print (UBound(arr) - LBound(arr) + 1) * Len(arr(LBound(arr)))
Непосредственное окно покажет:
8
Я понимаю, что это супер поздно, но … то, что вы хотите, это LenB()
Public Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Debug.Print LenB("a") '==>2 i.e. ["a",0&]
Dim r as RECT
debug.print LenB(r) '==>16 i.e. 4 bytes for each long