8

I current have 2 Macros:

The second macro is called within the first to perform a task. However I have logic within the second macro that states if my variable LastRow < 3 then exit the sub. This of course takes us immediately back into macro 1. What I desire here is to then exit immediately macro 1 as well. The way I have attempted to do this is by making LastRow public within both macros.. so when we exit back into macro 1, we have:

sub macro1()
application.run("macro2")
    if LastRow < 3 then
    exit sub
end sub

where macro 2()

sub macro1()

    Static LastRow As Long

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

I believe I may the issue may be that Static is not giving macro 1 access to variable LastRow.

whats the best way to proceed?

Regards!

4

3 回答 3

10

你可以这样使用End statement

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 Basic 程序的正常终止,您应该卸载所有窗体。一旦没有其他程序持有对从您的公共类模块创建的对象的引用并且没有代码执行,您的程序就会关闭。

于 2013-06-03T12:57:12.150 回答
1

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

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 中。

于 2013-06-03T19:39:20.597 回答
1

例如,您可以使用 Function 而不是 Sub 并返回 Boolean。

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

然后在你的第一个宏中:

sub macro1()
    if Not macro2 Then Exit Sub
end sub
于 2013-06-03T11:57:10.887 回答