web-dev-qa-db-ja.com

VBAでエラーが発生した場合に関数から戻る方法

VBAを使い始めて、エラーが発生したときに関数から戻りたいと思っています。そうすることができません。ポインタはありますか?

Function GetEditboxValue(control As IRibbonControl, text As String) As String

    If Not IsMissing(text) Then
        If Not IsNumeric(text) Then
            MsgBox "Please enter numeric value only."
            ' I WANT TO RETURN HERE 
        End If
    End If


    If control.id = "xyz" Then
    spaceAboveTable = text
    End If


End Function
19
Ashish Gupta

さらに実行しないようにするには、そこにEXIT FUNCTIONを配置する必要があります。

Function GetEditboxValue(control As IRibbonControl, text As String) As String

    If Not IsMissing(text) Then
        If Not IsNumeric(text) Then
            MsgBox "Please enter numeric value only."
            EXIT FUNCTION
        End If
    End If


    If control.id = "xyz" Then
    spaceAboveTable = text
    End If


End Function
34
Sarfraz

一般的な意味で(私は実際にはまだ言われていないことは何も言っていません):

Function Foo(inputVar As Double) As Double

    On Error GoTo ErrorHandler

    ' Code assigning something to returnValue and defaultOutput

    Foo = returnValue

    Exit Function

    ErrorHandler:

    Foo = defaultOutput

 End Function

もちろん、ダブルでなければならない理由はありません。

(「End Function」の代わりに2番目の「Exit Function」があったため、編集されました。)

6
user4588747

MsgBoxステートメントの後にExit Functionを使用できます

1
Alex P

別のオプションは、Err.Raiseを使用して明示的にエラーを発生させることです。この関数内にエラーハンドラーがない(つまり、On Error ...行がない)ため、エラーは、エラーハンドラーが実行されるまで、コールスタックを通じて伝播されます。

0
mwolfe02