2016-07-07 72 views
-1

在下面的代码中,为什么在x = i^3时出现溢出错误?VBA,另一个溢出错误

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 

当我取出,与暗淡n的长开始,并以对循环结束的代码的部分,并把它变成一个辅助功能,然后将剩余的代码的工作(即,没有溢出错误在x = i^3)。

+1

你的代码是如此晦涩,很难看到i'只是多少'递增。 “Long”可以容纳的数字的大小是有限制的。一旦'i'超过1290,'i^3'溢出很长时间。在回答您的其他问题时,我建议您需要使用变体的小数子类型来完成您似乎正在尝试做的事情。该建议仍然成立。 –

+0

另外 - 请注意,您不会在连续循环中重置's'。如果你的意图是得到'x'中数字的总和,那么你可能应该在for循环之前将's'置于0。 –

+0

您的评论,我需要将循环前重置s为0,我认为这解决了我的问题。再次感谢! – TylerC

回答

0

Data Type Summary (Visual Basic) - MSDN - Microsoft不在VBA VBA Data Types

的Visual Basic龙使用的数据类型是8个字节通过9,223,372,036,854,775,807一个最小/最大的-9,223,372,036,854,775,808值。

VBA Long是4个字节,最小/最大值为-2,147,483,648到2,147,483,647。

1291^3 = 2151685171“运行时错误6溢出