как изменить функцию макроса - PullRequest
0 голосов
/ 06 марта 2019

Я получил файл Excel, который содержит ссылку на функцию f (x, y).Файл не содержит макрос.Я написал макрос с другой функцией и сохранил его с расширением .xlsm.когда я запускаю новый макрос, я получаю ошибку времени выполнения '28' из ошибки пространства стека.

Что это значит и как я могу исправить?Мне сказали, что мне не нужно визуальное основание, чтобы сделать это.Это специальный дополнительный пакет?Спасибо.

Sub xplusy()
'
' xplusy Macro
' Function f(x,y) f=x+y End Function
'

'
    Application.Run "'5_3 Runge-Kutta.xlsm'!xplusy"
    Sheets("RK4").Select
    Range("C9").Select
    Application.Run "'5_3 Runge-Kutta.xlsm'!xplusy"
    Range("E8").Select
    Application.CommandBars("Help").Visible = False
    Application.Goto Reference:="xplusy"
End Sub

Ответы [ 2 ]

2 голосов
/ 06 марта 2019

Давайте сократим ваш Sub до самого базового уровня:

Sub VeryBasic()
    Application.Run "VeryBasic"
    Application.Run "VeryBasic"
    Application.GoTo "Location"
End Sub

Теперь, посмотрите, как этот код называет себя ?Если мы расширим его на 1 уровень, мы получим это:

Sub VeryBasic()
    'Application.Run "VeryBasic"
        Application.Run "VeryBasic"
        Application.Run "VeryBasic"
        Application.GoTo "Location"
    'Application.Run "VeryBasic"
        Application.Run "VeryBasic"
        Application.Run "VeryBasic"
        Application.GoTo "Location"
    Application.GoTo "Location"
End Sub

Разверните его на 2 уровня:

Sub VeryBasic()
    'Application.Run "VeryBasic"
        'Application.Run "VeryBasic"
            Application.Run "VeryBasic"
            Application.Run "VeryBasic"
            Application.GoTo "Location"
        'Application.Run "VeryBasic"
            Application.Run "VeryBasic"
            Application.Run "VeryBasic"
            Application.GoTo "Location"
        Application.GoTo "Location"
    'Application.Run "VeryBasic"
        'Application.Run "VeryBasic"
            Application.Run "VeryBasic"
            Application.Run "VeryBasic"
            Application.GoTo "Location"
        'Application.Run "VeryBasic"
            Application.Run "VeryBasic"
            Application.Run "VeryBasic"
            Application.GoTo "Location"
        Application.GoTo "Location"
    Application.GoTo "Location"
End Sub

Надеемся, вы увидите, что этот код будет продолжать получатьвсе больше и больше, фактически не делая ничего , кроме добавления еще одной своей копии в «Стек» для запуска.В конце концов, вашему стеку не хватит места (или вашему компьютеру не хватит памяти), и вы получите ошибку переполнение стека .

1 голос
/ 06 марта 2019

Вы вызываете функцию xplusy(), которая вызывает функцию xplusy(), которая вызывает функцию xplusy(), которая вызывает функцию xplusy(), ....
Каждый раз, когда вы вызываете функцию, ее ссылка добавляется к так называемому stack, поэтому вы перегружаете этот стек, объясняя сообщение об ошибке.

В исходном файле вы должны проверить имя макроса и вызываемый вами макрос (они определенно должны отличаться).

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