如何在同一个子中调用一个子一次?

How to call a sub within same sub once?

我想根据条件调用同一个子例程的子例程,但一旦满足就退出

例如

Dim p as Long

Sub Main()
  Debug.Print "Start Main"
  p = 1
  call A
  Debug.Print "End Main"
End Sub

Sub A()

  Debug.Print "Start"

  if p = 1 then
     p = 2
     call A
  End if

  Debug.Print "End"

End Sub

如果我 运行 Main 我会得到以下输出 这是正常的,因为我们调用 A 两次所以两次开始和两次结束

Start Main
Start
Start
End
End
End Main

但是我不想在子 A 第一次结束后 return 到子 A 的 End if 这意味着如果我调用 Main

我想要以下输出
Start Main
Start
Start
End
End Main

注意只有一个End

只需在您希望 A() 结束的地方添加一个 Exit Sub

Dim p as Long

Sub Main()
  Debug.Print "Start Main"
  p = 1
  call A
  Debug.Print "End Main"
End Sub

Sub A()

  Debug.Print "Start"

  if p = 1 then
     p = 2
     call A
     Exit Sub
  End if

  Debug.Print "End"

End Sub

使用 else 子句

Dim p As Long

Sub Main()

    Debug.Print "Start Main"

    p = 1
    Call A

    Debug.Print "End Main"

End Sub

Sub A()

    Debug.Print "Start"

    If p = 1 Then
        p = 2
        Call A
    Else
        Debug.Print "End"
    End If

End Sub