退出该按钮中的所有潜艇

时间:2017-08-17 14:54:21

标签: excel vba excel-vba

我有一个按钮,一个接一个地运行几个潜艇:

Private Sub CommandButton2_Click()
    Application.Run ("sub1") 
    Application.Run ("sub2") 
    Application.Run ("sub3")  
    Application.Run ("sub4")      
End Sub

我在每个子组件中检查是否存在要打开的文件,如果是,则继续,如果不存在,则为Exit Sub。但问题是,它只退出当前的子,但所有下一个都被执行,这可能会导致混乱。

有没有办法退出所有后续潜艇?

3 个答案:

答案 0 :(得分:2)

一个例子

if sub1 then sub2

使用这样的函数,最后一个可以保留为子

public function sub1() as Boolean

dim blnFileExists as Boolean

....file checking

sub1=blnFileExists

if blnFileExists then exit function

....go on

end function

答案 1 :(得分:1)

  

如果是,则继续,如果不是,则为Exit Sub s。

在所有情况下,就调用者而言,您的程序已成功完成。

似乎是一个"让它冒出来的情况"对我来说。我认为你的程序看起来像这样:

Private Sub DoSomething()
    On Error GoTo CleanFail
    'do stuff
CleanExit:
    'clean up resources
    Exit Sub
CleanFail:
    Debug.Print Err.Number, Err.Description
    'handle error (?)
    Resume CleanExit
End Sub

因此调用者无法知道操作是否成功。

如果让他们返回Boolean表示成功(即将其转换为Function程序并返回False出错)并不是很有意义 - 这并非总是如此一个很好的解决方案,尤其是如果错误路径真的是例外),那么另一个解决方案是让"愉快的路径& #34;继续:

Private Sub DoSomething()
    On Error GoTo CleanExit
    'do stuff
CleanExit:
    'clean up resources
    With Err
        If .Number <> 0 Then .Raise .Number, "DoSomething", .Description
    End With
End Sub

现在您的调用代码会知道发生了什么(您可以提出自定义错误,将过程包含在Source等),并且可以采取相应措施:

Private Sub CommandButton2_Click()
    On Error GoTo CleanFail
    DoSomething
    DoSomethingElse
    DoAnotherThing
    Exit Sub
CleanFail:
    With Err
        MsgBox "Error " &  & .Number & " in " & .Source & ": " & .Description, vbExclamation 
    End With
End Sub

答案 2 :(得分:-2)

这对我有用:

Function sub1()
     ...
     Dim result As Boolean
     result=True
     If (fileThereIs = False) Then
             result=False
     End If


    ...
    sub1=result
End Function

Private Sub CommandButton2_Click()
    Dim fileCheck As Boolean
    fileCheck = Application.Run("sub1")
    If (fileCheck = True) Then
         Application.Run ("sub2") 
         Application.Run ("sub3")  
         Application.Run ("sub4")      
    End If
End Sub