在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#中引发溢出错误。
答案 0 :(得分:5)
type of an integer literal是Integer
(最大值+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)