在vba中使用我自己的函数获得没有gosub的返回

DRF*_*DRF 5 vba return

我一直在与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
Run Code Online (Sandbox Code Playgroud)

我传入的对象v目前没什么,所以我有点期待结果是一个微不足道的错误.令人惊讶的是,我得到一个错误返回没有gosub.任何线索可能是为什么?

Pet*_*ert 15

删除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
Run Code Online (Sandbox Code Playgroud)

或者,使用这个:

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

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.
Run Code Online (Sandbox Code Playgroud)


Pat*_*rez 7

Exit Function而不是Return.

您也可以Exit Function通过使用类似的结构来 避免这些

If .... Then  
    'some code
ElseIf...Then 
   'some other code
ElseIf...Then 
   'etc 
Else  
   'final 
End if 
Run Code Online (Sandbox Code Playgroud)