Excel VBA运行时错误6溢出-为什么会发生这种情况?
在我对以下问题的回答中:在Math SE上,我目前在线上遇到一个运行时错误:Excel VBA运行时错误6溢出-为什么会发生这种情况?,excel,runtime-error,overflow,vba,Excel,Runtime Error,Overflow,Vba,在我对以下问题的回答中:在Math SE上,我目前在线上遇到一个运行时错误: P=599*601 错误消息为运行时错误6溢出 p被定义为double类型的公共变量。我也在我的“模”函数中使用了p,定义为双精度 为什么会发生这种情况,我能做些什么来纠正它 我找到了一个解决方法:如果我将所述行改为: P=359999 这样就不会发生错误。因此,为什么P=599*601行会出现错误?经过研究,我发现这个怪癖可以通过以下代码解决: Dim Prime1 as Long Dim Prime2 as L
P=599*601
错误消息为运行时错误6溢出
p被定义为double类型的公共变量。我也在我的“模”函数中使用了p,定义为双精度
为什么会发生这种情况,我能做些什么来纠正它
我找到了一个解决方法:如果我将所述行改为:
P=359999
这样就不会发生错误。因此,为什么P=599*601行会出现错误?
经过研究,我发现这个怪癖可以通过以下代码解决:
Dim Prime1 as Long
Dim Prime2 as Long
Public P as Long
...
P=Prime1 * Prime2
问题的原因可能是由于当乘以整数时,由于数字被赋予了整数类型p。
p
是双精度的吗?为什么?在您的情况下,您应该将其设置为Long
,在这里阅读有关数据类型的更多信息:因此我需要将这两种数据类型都更改为Long for p?-例如,在“公共P为双精度”和模函数“P为双精度”行中,问题已更新,请检查原因是599
和601
都是整数,因此Integer*Integer
的计算试图给出Integer
结果,并溢出。只要两个数字中的一个是long
(例如P=599&*601
,或P=599*601&
,或P=CLng(599)*601
等),那么计算就可以进行。计算完成后,结果被放入P
,因此P
在任何时候都不会被视为整数
,而只是中间计算。