首页 > 解决方案 > 如何更改宏功能

问题描述

我得到了一个包含对函数 f(x,y) 的引用的 excel 文件。该文件不包含宏。我编写了一个具有不同功能的宏并将其保存为 .xlsm 扩展名。当我运行新宏时,出现运行时错误“28”超出堆栈空间错误。

这是什么意思,我该如何纠正?有人告诉我,我不需要 Visual Basic 来执行此操作。这是一个特殊的附加包吗?谢谢你。

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

标签: excelvbaexcel-formula

解决方案


让我们将您的 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

希望你能看到这段代码会变得越来越大,除了将另一个自身的副本添加到“堆栈”来运行之外,实际上没有做任何事情。最终,您的堆栈空间不足(或者您的计算机内存不足),您会收到堆栈溢出错误。


推荐阅读