Excel VBA макросы и сообщения об ошибках

Я очень неопытен в Excel и столкнулся с проблемой программирования макроса. Он просто останавливается без какого-либо сообщения об ошибке, независимо от того, установил ли я точку останова и перешагнул или нет.

Я что-то пропустил? Должен ли я включать сообщения об ошибках явно?

Как то так, в модуле:

Function Provoke(XYZ As Integer) As Integer
   Provoke = XYZ / 0
End Function

Функция используется в формуле внутри ячейки, как это

=Provoke(4711)

Как я могу заставить его жаловаться на деление на ноль?

2 ответа

Если в функции возникает ошибка при вызове из рабочего листа как UDF, вы не увидите никаких сообщений об ошибках - вы просто получите ошибку #VALUE, возвращенную в ячейку (и)

Если вы вызовете ту же функцию из Sub в VBA, вы увидите ошибку.

Если вы хотите иметь возможность возвращать более конкретные сообщения об ошибках, вам нужно немного больше кодировать.

Например

Function Provoke(XYZ As Integer)

   On Error GoTo haveError
   Provoke = XYZ / 0
   Exit Function

haveError:
    'what type of error did we get?
    Select Case Err.Number
        Case 11: Provoke = CVErr(xlErrDiv0)
        Case Else: Provoke = "Error!"
    End Select

End Function

Хорошая ссылка для этого: http://www.cpearson.com/excel/ReturningErrors.aspx

Да, вам нужно предусмотреть, чтобы сообщить VBA, что делать в случае возникновения ошибки.

Произошла ошибка из-за этой строки в вашем коде:

Provoke = XYZ / 0

Ни одно число не делится на ноль, и это приводит к ошибке. Основная математика: any number ÷ 0 = ∞,

Чтобы проверить это воочию, вы можете попробовать что-то вроде этого, чтобы перехватить номер ошибки, а также источник и описание:

Function Provoke(XYZ As Integer)
    On Error Resume Next
    Provoke = XYZ / 0
    If Err.Number <> 0 Then Provoke = "Error# " & Err.Number & " - generated by " & Err.Source & " - " & Err.Description
    On Error GoTo 0
End Function

Теперь, если вы попробуете

=Provoke(4711)

Вы получите результат как:

Error# 11 - generated by VBAProject - Division by zero
Другие вопросы по тегам