2

最近のバージョンの Excel VBA では、VB エンジンは、整数オーバーフロー制限を維持しながら、整数データ型を Long に変換します。経験則として、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 に答える