首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在错误发生后停止执行代码?

如何在错误发生后停止执行代码?
EN

Stack Overflow用户
提问于 2022-03-13 15:31:37
回答 1查看 88关注 0票数 0

我的表单允许用户通过各种控件进行筛选,包括字符串搜索框。一个单独的函数CalculateSearchString处理此搜索字段以筛选(关键字、确切短语等);在此函数中,我使用错误处理来捕获由不正确的用户输入引起的错误(即混淆标点符号)。错误处理工作正常,但是如果搜索输入不正确,我希望代码能够完全停止。

我想要的:

filter

  • function

  • 用户输入格式不正确的搜索字符串,单击CalculateSearchFilter抛出错误。消息框:“修复您的搜索条件!”
  1. 代码完全停止,并且没有应用

筛选器。

实际发生了什么:

filter

  • function

  • 用户输入格式不正确的搜索字符串,单击CalculateSearchFilter抛出错误。消息框:“修复搜索条件!”Exit function
  1. calling过程cmdFilterOn仍然运行,应用了一个不完整的筛选器(好像搜索框是空的)

问题:如何完全停止代码执行,不仅在函数中,而且在其调用过程中?函数在多个地方使用,因此将其与调用过程合并是不实际的。

代码语言:javascript
复制
Private Sub cmdFilterOn()
    Dim strSearch As String
    strSearch = CalculateSearchFilter

    'do more stuff
End Sub

Private Function CalculateSearchFilter() As String
On Error GoTo ErrHandler
    'do stuff
    If 'user input is wrong, then raise a custom error:
        Err.Raise 50000
    End If

ExitHandler:
    Exit Function
ErrHandler:
    If Err.Number = 50000 Then msgbox "Fix your search terms!"
    Resume ExitHandler
End Sub

Private Sub cmdYetAnotherButton()
    'which also calls on CalculateSearchFilter
End Sub

将输入验证移至调用过程也是不实际的,因为这将迫使我重复CalculateSearchFilter()中的大部分代码。

(在我编写这篇文章时,我想到了另一个解决方案,即在函数错误处理程序和调用过程中设置CalculateSearchFilter = "an error occurred"

If CalculateSearchFilter = "an error occurred" Then Exit Sub

...but还有更多的“官方”答案吗?)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-03-13 16:13:09

您可以尝试返回一个布尔值。

代码语言:javascript
复制
Option Explicit

Private Sub cmdFilterOn()
    Dim strSearch As String
    If CalculateSearchFilter(strSearch) Then

        'do more stuff
    
    End If
End Sub

Private Function CalculateSearchFilter(ByRef strSearch As String) As Boolean
On Error GoTo ErrHandler
    'do stuff
    If 'user input is wrong, then raise a custom error:
        Err.Raise 50000
    End If

    CalculateSearchFilter = True
    
ExitHandler:
    Exit Function
ErrHandler:
    If Err.Number = 50000 Then MsgBox "Fix your search terms!"
    CalculateSearchFilter = False
    Resume ExitHandler
End Function

Private Sub cmdYetAnotherButton()
    'which also calls on CalculateSearchFilter
End Sub

Alternative:正如注释中提到的,如果您想要得到一个字符串,那么我将返回一个空字符串。我不建议返回字符串,就像出现错误或其他任何情况一样。

代码语言:javascript
复制
Option Explicit

Private Sub cmdFilterOn()
    Dim strSearch As String
    strSearch = CalculateSearchFilter
    If Len(strSearch) > 0 Then

        'do more stuff
    
    End If
End Sub

Private Function CalculateSearchFilter() As String
On Error GoTo ErrHandler
    'do stuff
    If 'user input is wrong, then raise a custom error:
        Err.Raise 50000
    End If

    
    
ExitHandler:
    Exit Function
ErrHandler:
    If Err.Number = 50000 Then MsgBox "Fix your search terms!"
    CalculateSearchFilter = vbNullString
    Resume ExitHandler
End Function

Private Sub cmdYetAnotherButton()
    'which also calls on CalculateSearchFilter
End Sub
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71458250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档