VBA中是否有相當於C++
sizeof
函數?VBA等效Sizeof()?
唯一遠程相似的函數似乎是陣列上的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中是否有相當於C++
sizeof
函數?VBA等效Sizeof()?
唯一遠程相似的函數似乎是陣列上的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
雖然
對於一個數組,如果您暫時將數組放大一個項目然後縮回到所需大小,您可能會對執行一些操作:
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
會有的Len Function但字符串它不會爲SizeOf
工作,因爲它會從字面上檢查包含在一個字符串變量的字符串的長度。
所以檢查int數組的字節大小:
Dim arr(1 To 4) As Integer
Debug.Print (UBound(arr) - LBound(arr) + 1) * Len(arr(LBound(arr)))
立即窗口將顯示: 8
這完全沒有回答我的問題。 – enderland
@enderland;我認爲現在是。 –
你會在VBA中使用這些信息的呢?我無法想象一個非人爲的用例。 – delnan
@delnan在看http://stackoverflow.com/questions/12320127/parse-data-in-multidimensional-vba-array我打算回答比較顯示該數組實際使用的內存很少。然而,我意識到我無法評估這一點(沒有簡單地找到「Variant」的內存分配並手動計算)。 – enderland
@enderland數組中沒有「實際使用」的內存。數組使用盡可能多的內存,因爲它聲明。維度中元素的數量是'ubound(arr,d) - lbound(arr,d)+ 1',其中'd'是基於1的維度編號。 – GSerg