首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套宏:范围:如何全部退出?

嵌套宏:范围:如何全部退出?
EN

Stack Overflow用户
提问于 2013-06-03 11:44:54
回答 3查看 24.2K关注 0票数 8

我目前有两个宏:

在第一个宏中调用第二个宏来执行任务。但是,我在第二个宏中有逻辑,该宏声明如果变量LastRow < 3,则退出子宏。当然,这会让我们立即回到宏1中,我想要的是立即退出宏1。我尝试这样做的方法是在两个宏中公开LastRow。因此,当我们退出宏1时,我们有:

代码语言:javascript
复制
sub macro1()
application.run("macro2")
    if LastRow < 3 then
    exit sub
end sub

其中宏2()

代码语言:javascript
复制
sub macro1()

    Static LastRow As Long

        if LastRow < 3 then
        exit sub
else do something
end if
    end sub

我相信问题可能是静态没有赋予宏1对变量LastRow的访问权限。

最好的方法是什么?

致以问候!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-06-03 12:57:12

您可以以这种方式使用End statement

代码语言:javascript
复制
sub macro2()

    Static LastRow As Long

    if LastRow < 3 then
        '...here is End
        End
    else 
        'do something
    end if
end sub

但是,End有一些您应该注意的缺点。让我在MSDN的基础上引用它们:

立即终止执行。它本身从来不需要,但可以放置在一个过程中的任何地方,以结束代码执行、关闭使用Open语句打开的文件和清除变量。 执行时,End语句重置所有模块级变量和所有模块中的所有静态局部变量.若要保留这些变量的值,请改用Stop语句。然后可以继续执行,同时保留这些变量的值。 End语句提供了一种强制程序停止的方法。要正常终止Visual程序,应卸载所有窗体。如果没有其他程序保存对从公共类模块创建的对象的引用,并且没有执行代码,程序就会立即关闭。

票数 10
EN

Stack Overflow用户

发布于 2013-06-03 11:57:10

例如,您可以使用函数而不是Sub,并返回布尔值。

代码语言:javascript
复制
Function macro2() As Boolean
'returns false if the last row is 2 or less, true otherwise

    LastRow As Long

    if LastRow >= 3 then
        macro2 = True
        'do something
    end if
End Function

然后在第一个宏中:

代码语言:javascript
复制
sub macro1()
    if Not macro2 Then Exit Sub
end sub
票数 1
EN

Stack Overflow用户

发布于 2013-06-03 19:39:20

在第一个宏中声明变量,并将其ByRef传递给第二个宏。

代码语言:javascript
复制
Sub Mac1()

    Dim lLastRow As Long

    Mac2 lLastRow

    If Not IsTooBig(lLastRow) Then
        'do stuff
    End If

End Sub

Sub Mac2(ByRef lLastRow As Long)

    lLastRow = 5

    If IsTooBig(lLastRow) Then
        Exit Sub
    End If

End Sub

Function IsTooBig(ByVal lLastRow As Long) As Boolean

    IsTooBig = lLastRow >= 5

End Function

ByRef意味着您在Mac2中对lLastRow所做的任何更改都将反映在Mac1中的lLastRow中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16895948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档