2016-07-07 2 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溢出