VBA中附加行的最大长度

时间:2019-01-09 16:18:08

标签: vba access-vba

在VBA中添加数字时,一行的最大长度是多少?例如在MS Access中:

 Dim L As Long

    ' this works
    L = 2696 + 2630 + 2860 + 2860 + 2860 + 2860 + 2795 + 2795 + 2630 + 2630 + 2630 + 263

    ' this gives an Overflow error
    L = 2696 + 2630 + 2860 + 2860 + 2860 + 2860 + 2795 + 2795 + 2630 + 2630 + 2630 + 2630

    Debug.Print L

我从未见过此文件。此外,它不会在Visual Studio的C#中引发溢出错误。

3 个答案:

答案 0 :(得分:5)

type of an integer literalInteger(最大值+32767):

?typename(2696)
Integer

添加 n Integer s的结果也属于Integer类型:

?typename(2696 + 2630)
Integer

一旦累加超过Integer的边界,您将得到一个溢出异常,分配给您的变量是Long并不重要,因为累加是在累加之前执行的。分配。

解决此问题的方法是使附加值之一成为Long,您可以使用&类型后缀轻松完成此操作:

L = 2696& + 2630 + ..

答案 1 :(得分:2)

您需要使用文字类型:

Sub FFF()

    Dim L As Long
    Dim V As Variant

    ' this works
    L = 2696 + 2630 + 2860 + 2860 + 2860 + 2860 + 2795 + 2795 + 2630 + 2630 + 2630 + 263

    ' this DOES NOT give an Overflow error
    V = 2696& + 2630& + 2860& + 2860& + 2860& + 2860& + _
        2795& + 2795& + 2630& + 2630& + 2630& + 2630&

    MsgBox TypeName(V) '//Long

End Sub

更新

有趣的是,如果将sum变量声明为Variant,则将自动转换为Long。例如,在以下代码中,sum变量是Integer 之前最后添加-在此之后,它具有Long类型:

Sub SSS()

    Dim sum As Variant, arr As Variant, num As Variant

    arr = Array(2696, 2630, 2860, 2860, 2860, 2860, _
                2795, 2795, 2630, 2630, 2630, 2630)

    For Each num In arr
        '// sum is Integer before last addition
        '// and Long - after it
        sum = sum + num
    Next

    MsgBox TypeName(sum) '//Long

End Sub

答案 2 :(得分:2)

您需要指定表达式中元素之一的类型,然后VBA应该使用该类型。我认为文字整数是隐式整数(16位),可能是错误的。

像这样

Dim L As Long
L = 2696& + 2630 + 2860 + 2860 + 2860 + 2860 + 2795 + 2795 + 2630 + 2630 + 2630 + 2630
Debug.Print L, TypeName(L)

否则这会起作用

Dim L As Long
L = CLng(2696) + 2630 + 2860 + 2860 + 2860 + 2860 + 2795 + 2795 + 2630 + 2630 + 2630 + 2630
Debug.Print L, TypeName(L)