VBA,另一个溢出错误

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

在下面的代码中,为什么在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(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