2

在最新版本的 Excel VBA 中,VB 引擎将 Integer 数据类型转换为 Long,同时保持 Integer 溢出限制。因此,根据经验,我总是在 Excel VBA 中使用 Long 值。

有谁知道Access中是否也是如此?我意识到它是具有不同引用的同一个引擎,但随着我更多地进入 Access VBA,我不想假设。

4

2 回答 2

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

您会注意到大小实际上是不同的(以每个字节数递增,分别为 2 和 4 来衡量)。

此自动转换存在与 Excel 和 Access 的相同输出相同的行为(我在 32 位 Windows 7 上使用 Access/Excel 2010)。我很想看看旧版本的输出是什么。

于 2013-08-22T15:42:39.320 回答
0

不,在 Access 中不一样。
如果要处理大于 int 限制的数字,则需要使用 long。
顺便说一句,虽然 excel VBA 可能会进行转换,但这不是一个好习惯。

MS Access 问答 - 溢出错误

于 2013-08-22T15:27:23.083 回答