5

私は少しの間 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 であると予想していました。驚いたことに、代わりに Return without gosub というエラーが表示されます。それがなぜなのか手がかりはありますか?

4

2 に答える 2

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

または、これを使用します。

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.
于 2013-03-05T14:18:19.340 に答える
8

Exit Functionの代わりに使用しReturnます。

Exit Function次のような構造を使用して それらを回避することもできます

If .... Then  
    'some code
ElseIf...Then 
   'some other code
ElseIf...Then 
   'etc 
Else  
   'final 
End if 
于 2013-03-05T14:14:26.500 に答える