VBA Эквивалент Sizeof ()?

Есть ли эквивалент 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);

2

Решение

Несколько связанных с указателем функций, которые могут использоваться в 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
3

Другие решения

Там будет Лен Функция но со строками это не будет работать как SizeOf потому что он будет буквально проверять длину строки, содержащейся в строковой переменной.

Итак, чтобы проверить размер байта массива целых:

Dim arr(1 To 4) As Integer
Debug.Print (UBound(arr) - LBound(arr) + 1) * Len(arr(LBound(arr)))

Непосредственное окно покажет:
8

2

Я понимаю, что это супер поздно, но … то, что вы хотите, это 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
0
По вопросам рекламы [email protected]