我有一个按钮,一个接一个地运行几个潜艇:
Private Sub CommandButton2_Click()
Application.Run ("sub1")
Application.Run ("sub2")
Application.Run ("sub3")
Application.Run ("sub4")
End Sub
我在每个子组件中检查是否存在要打开的文件,如果是,则继续,如果不存在,则为Exit Sub
。但问题是,它只退出当前的子,但所有下一个都被执行,这可能会导致混乱。
有没有办法退出所有后续潜艇?
答案 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