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 

Когда я вынуть часть кода, который начинается с Dim п до тех пор, и заканчивается цикл, и превратить его в вспомогательную функцию, а затем остальной код работает (то есть, нет ошибки переполнения в x = i^3).

+1

Ваш код настолько неясны, что трудно понять, насколько' увеличивается i'. Существует ограничение на количество чисел, которое может удерживать 'Long'. Когда 'i' превышает 1290,' i^3' переполняется длинным. В моем ответе на ваш другой вопрос я предложил вам использовать десятичный подтип варианта для выполнения того, что вы пытаетесь сделать. Эта рекомендация по-прежнему сохраняется. –

+0

Также - обратите внимание, что вы никогда не сбрасываете '' 'последовательные проходы через цикл. Если ваше намерение состоит в том, чтобы получить сумму цифр в 'x', тогда, возможно, вы должны отдохнуть' s' до 0 перед циклом for. –

+0

Ваш комментарий, что мне нужно сбросить s до 0 до цикла, я думаю, что решает мою проблему. Еще раз спасибо! – TylerC

ответ

0

The Data Type Summary (Visual Basic) - MSDN - Microsoft не являются типы данных, используемые в VBA VBA Data Types

Visual Basic Long 8 байт с мин/макс значения -9,223,372,036,854,775,808 через 9,223,372,036,854,775,807.

VBA Long - это 4 байта с минимальным/максимальным значением -2,147,483,648 до 2,147,483,647.

1291^3 = 2.151.685.171 «Ошибка выполнения 6 Переполнение

Смежные вопросы