VBA,另一个溢出错误
在下面的代码中,为什么在x=I^3处出现溢出错误VBA,另一个溢出错误,vba,Vba,在下面的代码中,为什么在x=I^3处出现溢出错误 Dim i As Long, x As Long, s As Long, k As Byte Do i = i + 1 x = i ^ 3 Dim n As Long, j As Long, b As String b = CStr(x) n = Len(b) For j = 1 To n s = s + Val(M
Dim i As Long, x As Long, s As Long, k As Byte
Do
i = i + 1
x = i ^ 3
Dim n As Long, j As Long, b As String
b = CStr(x)
n = Len(b)
For j = 1 To n
s = s + Val(Mid$(b, j, 1))
Next
If s = i Then
k = k + 1
Debug.Print i
End If
Loop Until k = 6
当我取出代码中以Dim n开头、以for循环结尾的部分,并将其转换为一个辅助函数时,剩下的代码就会工作(即,在x=I^3时没有溢出错误)。这些不是VBA中使用的数据类型
Visual Basic长度为8字节,最小/最大值为-9223372036854775808到9223372036854775807
VBA长度为4字节,最小/最大值为-2147483648到2147483647
1291^3=2151685171'运行时错误6溢出
您的代码非常模糊,很难看到
i
的增量是多少。Long
可以容纳的数字大小有一个限制。一旦i
超过1290,i^3
就会溢出一个长的值。在我对你的另一个问题的回答中,我建议你需要使用变量的decimal子类型来完成你似乎想要做的事情。这个建议仍然适用。另外--请注意,在循环的连续过程中,您永远不会重置s
。如果您的目的是获得x
中的数字之和,那么您可能应该在for循环之前将s
重置为0。您的评论是我需要在循环之前将s重置为0,我认为这解决了我的问题。再次感谢!你错了。当我运行你的代码时,我得到了同样的溢出错误。将光标悬停在i
上会显示触发错误时其值为1291
。