好吧,我刚刚创建了一个简单的sub,它给出了溢出的错误.但是,我没有看到代码有什么问题,而且真的很奇怪,因为50000*100远大于500*100.
sub add()
'This will cause an overflow error
cells(1,1) = 500 * 100
'But this won't
cells(2,2) = 50000 * 100
end sub
Run Code Online (Sandbox Code Playgroud) 我经常看到Overflow与vba错误有关的问题.
我的问题是为什么使用integer变量声明而不是仅仅定义所有数值变量(不包括double等)long?
除非您正在执行类似for循环的操作,您可以保证该值不会超过32,767的限制,否则是否会对性能产生影响或其他会导致不使用long?
我见过很多人相信以下内容
VBA将所有整数值转换为Long类型
事实上,即使是MSDN文章也说
"但是,在最近的版本中,VBA将所有整数值转换为Long类型,即使它们被声明为Integer类型."

这怎么可能?考虑这个简单的例子.
Sub Sample()
Dim I As Integer
I = 123456789
End Sub
Run Code Online (Sandbox Code Playgroud)
如果VBA将所有Integer值转换为类型,Long 即使它们被声明为Integer类型,那么上面的代码永远不会给你Overflow错误!
我在这里错过了什么?或者,我是否应该认为该陈述是错误的并且在开头时注意到该链接所说的内容
Sub TestFunction()
Dim var As Double
var = 25 * 24 * 23 * 22 * 21 * 20
End Sub
Run Code Online (Sandbox Code Playgroud)
我收到此vba操作的溢出错误.当我在具有功能的单元格中运行它时,我得到127,512,000
这可能是一个错误?这应该远低于此数据类型的大小限制吗?