Как вернуться из функции в случае ошибки в VBA - PullRequest
19 голосов
/ 29 декабря 2010

Я новичок в 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

Ответы [ 4 ]

35 голосов
/ 29 декабря 2010

Вам нужно поставить 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
6 голосов
/ 24 февраля 2016

В обобщенном смысле (на самом деле я не говорю ничего, что еще не было сказано):

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

Конечно, нет причин быть двойным.

(отредактировано, потому что у меня была вторая «Функция выхода» вместо «Конечная функция».)

1 голос
/ 29 декабря 2010

Вы можете использовать Exit Function после вашего MsgBox заявления

0 голосов
/ 30 декабря 2010

Другой вариант - явным образом вызвать ошибку, используя Err.Raise. Поскольку в этой функции нет обработчика ошибок (т. Е. Нет строки On Error ...), ошибка будет распространяться вверх по стеку вызовов, пока не попадет в обработчик ошибок.

...