gpt4 book ai didi

excel - 如果被调用的子调用 `Exit Sub`,则退出主子

转载 作者:行者123 更新时间:2023-12-04 21:09:44 27 4
gpt4 key购买 nike

我有一个调用另一个子的子,通常我需要退出被调用的子并停止执行调用它的其余子。
所以我有子 Add_Format_Button_Click调用另一个子:

call CheckEmptyComboboxValues
最常见的是 CheckEmptyComboboxValues最终会在
Exit sub
但是 Add_Format_Button_Click将继续执行其余部分。这是我需要帮助的地方,因为当 CheckEmptyComboboxValues退出,我需要 Add_Format_Button_Click也退出。
有人可以帮我解决这个看似简单的问题吗?
编辑: CheckEmptyComboboxValues包含数十个如果不是数百个 if 语句,其结构如下:
If Format_Layout.FilmType.Value = "" Then
MsgBox "Specify a film type!", , ("Film Type"): Exit sub
End If
所以我想我需要转 exit sub值变成我可以用 if 语句检查主子的东西
if CheckEmptyComboboxValues .value = "Exit sub" Then
exit sub

最佳答案

3 种解决方案,每种都适用于您的情况。我会选择第一个或最后一个解决方案。取决于项目其余部分的设计:
一、功能

Function CheckEmptyComboboxValues() As Boolean
If AnythingOddHappens Then
Exit Function
End If

CheckEmptyComboboxValues = True
End Function
这个函数的结果只有 True如果它跑到最后,只要你在它之前退出它就是 False
Sub Example()
If Not CheckEmptyComboboxValues Then Exit Sub

'instead of
'Call CheckEmptyComboboxValues
End Sub
2. 取消程序
Sub CheckEmptyComboboxValues(ByRef Cancel As Boolean)
If AnythingOddHappens Then
Cancel = True
Exit Sub
End If

End Sub


Sub Example()
Dim Cancel As Boolean
Call CheckEmptyComboboxValues(Cancel)

If Cancel Then Exit Sub
End Sub
这可以使用,但在这里我看不到任何优势,并且更喜欢上面的功能。如果您已经有一个带有返回值的函数并且想要额外的取消,或者如果您为事件编写代码,则此方法可能很有用。
3. 抛出错误
Sub CheckEmptyComboboxValues()
If AnythingOddHappens Then
Err.Raise vbObjectError + 513, "CheckEmptyComboboxValues", "Something odd happened"
Exit Sub
End If
End Sub

Sub Example()
On Error Goto ERR_HANDLER
Call CheckEmptyComboboxValues

Exit Sub
ERR_HANDLER:
MsgBox "check failed"
End Sub
如果您有多个可能引发错误的检查过程/功能,这可能是一个优势。与需要检查每个检查过程/功能的结果的第一个或第二个解决方案相比,此解决方案只需要一个错误处理程序,因此带有 slim 的代码。
这还有一个优点,即检查过程现在可以返回不同类型的错误,您的调用子可以使用这些错误为用户提供进一步的帮助。虽然前 2 个解决方案更像是“它没有通过检查”,但最后一个解决方案可以提供更详细的信息,例如“它没有通过检查,因为发生了 A/B/C”,具体取决于引发的错误。
Sub CheckEmptyComboboxValues()
If AnythingOddHappens Then
Err.Raise vbObjectError + 513, "CheckEmptyComboboxValues", "Something odd happened"
Exit Sub
End If

' more code here …
If AnythingDifferentOddHappens Then
Err.Raise vbObjectError + 514, "CheckEmptyComboboxValues", "Something different odd happened"
Exit Sub
End If
End Sub
现在您可以使用不同的错误编号向用户提供有关 的更详细的信息。什么出了问题,而不仅仅是出了问题。
Sub Example()
On Error Goto ERR_HANDLER
Call CheckEmptyComboboxValues

Exit Sub
ERR_HANDLER: 'possibility to give a more detailed information
Select Case Err.Number
Case vbObjectError + 513
MsgBox "check A failed"
Case vbObjectError + 514
MsgBox "check B failed"
Case Else
MsgBox "Undefined fail"
End Select
End Sub

关于excel - 如果被调用的子调用 `Exit Sub`,则退出主子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66812222/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com