【问题标题】:Getting return without gosub in my own function in vba在我自己的 vba 函数中获得没有 gosub 的返回
【发布时间】:2013-03-05 14:11:21
【问题描述】:

我已经与 vba 斗争了一段时间,但令人惊讶的是它并没有变得更好。 我编写了以下代码,因此我可以为对象使用特殊的比较运算符。

Public Function myEquals(v As CCtypestore) As Boolean

    If v Is Nothing Then
        myEquals = False
        Return
    End If

    If Me.Acronym = v.Acronym Then
        myEquals = True
        Return
    End If

    myEquals = False
    Return
End Function

我传入的对象 v 目前是 Nothing,所以我有点预计结果是微不足道的 False。令人惊讶的是,我在没有 gosub 的情况下返回错误。有什么线索吗?

【问题讨论】:

    标签: vba return


    【解决方案1】:

    删除Return 语句!

    在 VBA 中,您使用 myEquals = ... 行设置返回值。

    总而言之,您可以将您的函数简化为以下代码:

    Public Function myEquals(v As CCtypestore) As Boolean
        If Not v Is Nothing Then
            myEquals = (Me.Acronym = v.Acronym)
        End If
    End Function
    

    或者,使用这个:

    Public Function myEquals(v As CCtypestore) As Boolean
        On Error Goto ErrorHandler
        myEquals = (Me.Acronym = v.Acronym)
        Exit Function
    ErrorHandler:
        myEquals = False
    End Function
    

    Return 是一个古老的遗物,如果你想在代码中使用直接跳转,即构建意大利面条代码!请参阅帮助文件中的此示例:

    Sub GosubDemo()
    Dim Num
    ' Solicit a number from the user.
        Num = InputBox("Enter a positive number to be divided by 2.")
    ' Only use routine if user enters a positive number.
        If Num > 0 Then GoSub MyRoutine    
        Debug.Print Num
        Exit Sub    ' Use Exit to prevent an error.
    MyRoutine:
        Num = Num/2    ' Perform the division.
        Return    ' Return control to statement.
    End Sub    ' following the GoSub statement.
    

    【讨论】:

    • 啊,所以我应该使用退出而不是返回呢?谢谢
    • 在你的情况下,你甚至不需要Exit Function,因为你没有错误处理程序或类似的。 End Function 就够了!
    • 提前返回与高度嵌套的代码是有争议的,看看网上有很多关于它的论据!
    • @HaveAGuess:我同意,事实上我非常喜欢提前返回——比嵌套代码要好得多。但是,即使那样,您也会使用 Exit Function 而不是 Return
    【解决方案2】:

    使用Exit Function 代替Return

    您还可以通过使用类似

    的结构来避免使用 Exit Function
    If .... Then  
        'some code
    ElseIf...Then 
       'some other code
    ElseIf...Then 
       'etc 
    Else  
       'final 
    End if 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-07
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-28
      • 1970-01-01
      相关资源
      最近更新 更多