5

我有一个宏 (CMOV),它调用另一个子程序 (CMOV2),它检查一个条件,如果满足,显示一个 vbokaycancel 消息框,我将它设置为一个名为 irep 的变量,

如果有人点击取消(irep = 2)以取消整个宏,我想要它。那不仅是退出CMOV2,而且是退出CMOV。

目前,我有

If jackal(1) <> vbNullString Then
    irep = MsgBox("Warning: You have a selection with two swingarms" _
          & " that are on the same radius and cannot swing past one another " _
          & Chr$(13) & " Choose Okay if you still wish to proceed otherwise " _
          & " choose Cancel to revise your order" & Chr$(13) & "         " _
          & jackal(1) & Chr$(13) & "      " & jackal(2), vbOKCancel)
    **If irep = 2 Then
    Exit Sub**
    Else: End If
    Else: End If
End Sub

在子程序结束时。问题是即使退出 CMOV2,CMOV 仍会继续运行。有没有办法结束这个子,以及调用它的那个?

4

2 回答 2

9
End

请注意,End 完全停止代码执行(在当前调用堆栈内,因此它不会影响其他项目,如 Addins 等(一件好事))但它会关闭任何打开的文件句柄(一件好事)。另一方面,静态和模块级变量(如果您使用它们)将丢失它们的值,并且类终止方法将不会运行,因此如果您有更多的“应用程序”而不是宏,则可能不需要。

对于您的目的来说,这听起来没问题,并且可能是最简单的方法。

一个愚蠢的例子:

Sub foo()
    Dim i As Long
    For i = 0 To 10
        If i = 2 Then
            Debug.Print "hooray"
            End
        Else
            Debug.Print "hip"
        End If
    Next i
End Sub
于 2013-09-13T18:51:58.287 回答
5

在顶部声明一个布尔变量,True如果用户按下取消,则将其设置为。这是一个例子。

Dim ExitAll As Boolean

Sub CMOV()
    '
    '~~> Rest of the code
    '

    ExitAll = False

    CMOV2

    If ExitAll = True Then Exit Sub

    MsgBox "Hello World"

    '
    '~~> Rest of the code
    '
End Sub

Sub CMOV2()
    '
    '~~> Rest of the code
    '
    If jackal(1) <> vbNullString Then
        irep = MsgBox("Some Message", vbOKCancel)
        If irep = 2 Then
            ExitAll = True
            Exit Sub
        End If
    End If
    '
    '~~> Rest of the code
    '
End Sub
于 2013-09-13T18:45:11.700 回答