2012-09-07 97 views
2

VBA中是否有相當於C++sizeof函數?VBA等效Sizeof()?

唯一遠程相似的函數似乎是陣列上的UboundLBound運算符。

Dim arr(1 to 4) as integer 
MsgBox Ubound(arr) 

但是,這並不是真正的同樣的事情C++代碼:

int arr[10]; 
std::cout << sizeof(std::string) << "\t" << sizeof(arr); 
+1

你會在VBA中使用這些信息的呢?我無法想象一個非人爲的用例。 – delnan

+0

@delnan在看http://stackoverflow.com/questions/12320127/parse-data-in-multidimensional-vba-array我打算回答比較顯示該數組實際使用的內存很少。然而,我意識到我無法評估這一點(沒有簡單地找到「Variant」的內存分配並手動計算)。 – enderland

+0

@enderland數組中沒有「實際使用」的內存。數組使用盡可能多的內存,因爲它聲明。維度中元素的數量是'ubound(arr,d) - lbound(arr,d)+ 1',其中'd'是基於1的維度編號。 – GSerg

回答

3

可以在VBA中使用的一些指針相關的功能是在:http://support.microsoft.com/kb/199824sizeof雖然

無明顯當量

對於一個數組,如果您暫時將數組放大一個項目然後縮回到所需大小,您可能會對執行一些操作:

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 
+0

我得到這個輸出 - 528088544; 528088552; 8 - 這是如何向我展示任何有意義的信息? – enderland

+0

您的輸出顯示數組的第一個元素從位置528088544開始,第五個元素從528088552開始。這些位置之間的差異是8個字節,這(顯然)表示由4個整數佔用的大小。因此,每個整數佔用2個字節。你可以用兩個入口數組或者任何大於一個的數組大小來實現相同的結果 – barrowc

1

會有的Len Function但字符串它不會爲SizeOf工作,因爲它會從字面上檢查包含在一個字符串變量的字符串的長度。

所以檢查int數組的字節大小:

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

立即窗口將顯示: 8

+0

這完全沒有回答我的問題。 – enderland

+0

@enderland;我認爲現在是。 –