Недостаточно стекового пространства в vba при запуске кода для проекта euler # 1 - PullRequest
1 голос
/ 13 сентября 2010
Option Explicit
Sub peuler1()
Dim x As Variant
Dim y As Variant
y = 0
For x = 1 To 999
    If x Mod 3 = 0 Or x Mod 5 = 0 Then
    y = y + x
    End If
Next x
Call peuler1
End Sub

Почему это так долго? это не кажется слишком запутанным.

Ответы [ 5 ]

8 голосов
/ 13 сентября 2010

Я полагаю, что вы находитесь в рекурсивном цикле .

Удалить Call peuler1

1 голос
/ 14 сентября 2010

Как насчет этого?

Option Explicit 
Function peuler1() as integer
   Dim x As integer
   Dim y As integer 
   y = 0 
   For x = 1 To 999 
      If x Mod 3 = 0 Or x Mod 5 = 0 Then y = y + x 
   Next x 
   pueler1=y
End Sub 

Эта процедура является функцией , что означает, что она возвращает значение ( Subs do stuff. Функции что-то посчитать).Добавление peuler1=y внизу заставляет функцию возвращать значение y.Преимущество этого состоит в том, что теперь вы можете вызывать эту процедуру из другой процедуры.

Если вы работаете над этим в стандартном редакторе MS Office VBA, вы можете получить ответ, набрав debug.print peuler1 в окне Immmediate.

1 голос
/ 13 сентября 2010

Поскольку вы, кажется, вызываете функцию peuler1 внутри ее определения, вы затем продолжаете рекурсивно, пока не заполните пространство стека.

(я не использую Visual Basic, просто предположение)

1 голос
/ 13 сентября 2010

Вы вызываете свою подпрограмму изнутри себя.Это даст вам бесконечный цикл.

0 голосов
/ 13 сентября 2010

Переместите Call peuler1 за пределы End Sub.Вы звоните peuler1, когда доходите до конца peuler1 и никогда не доходите до конца.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...