2013-08-22 80 views
2

在最新版本的Excel VBA中,VB引擎將Integer數據類型轉換爲Long,同時保持整數溢出限制。因此,根據經驗,我總是在Excel VBA中使用Long值。在Access VBA中,整數是否被系統地轉換爲long?

有誰知道在Access中是否也是如此?我意識到這是具有不同引用的相同引擎,但隨着我進入Access VBA,我從不想假設。

回答

0

不,它在Access中不一樣。
如果處理的數字大於int的限制,則需要使用long。
只是一個側面說明,雖然excel VBA可能會做轉換,但這不是一個好的做法。

MS Access Q&A - Overflow Error

+0

你能否詳細說明你方的說明?我遇到了幾個不同意你的速度試驗。你只是指代碼的視覺解釋? – whistler

1

小心你的假設。

參見以下:

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)的輸出相同。我會非常感興趣的是看看舊版本中輸出的內容。

+0

我不認爲我假設基於MS開發中心,但無論如何,我的變量的大小不是我所關心的。這是他們的表現。 – whistler