在最新版本的Excel VBA中,VB引擎將Integer數據類型轉換爲Long,同時保持整數溢出限制。因此,根據經驗,我總是在Excel VBA中使用Long值。在Access VBA中,整數是否被系統地轉換爲long?
有誰知道在Access中是否也是如此?我意識到這是具有不同引用的相同引擎,但隨着我進入Access VBA,我從不想假設。
在最新版本的Excel VBA中,VB引擎將Integer數據類型轉換爲Long,同時保持整數溢出限制。因此,根據經驗,我總是在Excel VBA中使用Long值。在Access VBA中,整數是否被系統地轉換爲long?
有誰知道在Access中是否也是如此?我意識到這是具有不同引用的相同引擎,但隨着我進入Access VBA,我從不想假設。
不,它在Access中不一樣。
如果處理的數字大於int的限制,則需要使用long。
只是一個側面說明,雖然excel VBA可能會做轉換,但這不是一個好的做法。
小心你的假設。
參見以下:
Sub checkForVariableMemorySizes()
Dim arrInt() As Integer
ReDim arrInt(1 To 2)
arrInt(1) = 12
arrInt(2) = 456
Dim arrLong() As Long
ReDim arrLong(1 To 2)
arrLong(1) = 12
arrLong(2) = 456
Debug.Print "Integer size:" & vbTab & VarPtr(arrInt(2)) - VarPtr(arrInt(1)) & vbTab & vbTab & "Typename: " & TypeName(arrInt(2))
Debug.Print "Long size:" & vbTab & vbTab & VarPtr(arrLong(2)) - VarPtr(arrLong(1)) & vbTab & vbTab & "Typename: " & TypeName(arrLong(2))
End Sub
這個輸出:
Integer size: 2 Typename: Integer
Long size: 4 Typename: Long
你會發現,尺寸實際上是不同的(由字節,每字節遞增1,2和4的數目分別測量)。
此自動轉換存在相同的行爲,與Excel和Access(我在32位Windows 7上使用Access/Excel 2010)的輸出相同。我會非常感興趣的是看看舊版本中輸出的內容。
我不認爲我假設基於MS開發中心,但無論如何,我的變量的大小不是我所關心的。這是他們的表現。 – whistler
你能否詳細說明你方的說明?我遇到了幾個不同意你的速度試驗。你只是指代碼的視覺解釋? – whistler