在最新版本的 Excel VBA 中,VB 引擎将 Integer 数据类型转换为 Long,同时保持 Integer 溢出限制。因此,根据经验,我总是在 Excel VBA 中使用 Long 值。
有谁知道Access中是否也是如此?我意识到它是具有不同引用的同一个引擎,但随着我更多地进入 Access VBA,我不想假设。
在最新版本的 Excel VBA 中,VB 引擎将 Integer 数据类型转换为 Long,同时保持 Integer 溢出限制。因此,根据经验,我总是在 Excel VBA 中使用 Long 值。
有谁知道Access中是否也是如此?我意识到它是具有不同引用的同一个引擎,但随着我更多地进入 Access 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
您会注意到大小实际上是不同的(以每个字节数递增,分别为 2 和 4 来衡量)。
此自动转换存在与 Excel 和 Access 的相同输出相同的行为(我在 32 位 Windows 7 上使用 Access/Excel 2010)。我很想看看旧版本的输出是什么。
不,在 Access 中不一样。
如果要处理大于 int 限制的数字,则需要使用 long。
顺便说一句,虽然 excel VBA 可能会进行转换,但这不是一个好习惯。