vba: передача переменной в дескрипторы ошибок - PullRequest
1 голос
/ 19 ноября 2010

У меня есть заявление:

on error go to label

однако я хотел бы передать в метку переменную, которая вызвала ошибку

это возможно?

Ответы [ 4 ]

4 голосов
/ 19 ноября 2010

Вы можете использовать Err, чтобы получить номер ошибки и описание

 Sub|Function SomeName()
     On Error GoTo Err_SomeName          ' Initialize error handling.
     ' Code to do something here.
 Exit_SomeName:                          ' Label to resume after error.
     Exit Sub|Function                   ' Exit before error handler.
 Err_SomeName:                           ' Label to jump to on error.
     MsgBox Err.Number & Err.Description ' Place error handling here.
     Resume Exit_SomeName                ' Pick up again and quit.
 End Sub|Function
3 голосов
/ 19 ноября 2010

Во-первых, я думаю, вы имеете в виду:

on error goto label

И нет, вы не можете передавать переменные с помощью команды goto.Тем не менее, вы можете проверить Err.Description для получения подробной информации, и если вы поднимаете свои собственные ошибки, вы можете сделать это:

  ' Raise a custom error.
    Err.Raise Number:=vbObjectError + 1000, _
        Source:="TestRaiseCustomError", _
        Description:="My custom error description."

Так что, если вы поднимаете свою собственную ошибку, вы можете установить Source наполе, вызвавшее проблему.

См. Используйте метод повышения объекта Err для вызова пользовательских ошибок раздел эта ссылка для получения дополнительной информации.

0 голосов
/ 26 сентября 2016

Объявите глобальные переменные и используйте их в коде и в коде ошибки.

Public global_variable1 As Integer
Public global_variable2 As String

Private Sub Btn1234_Click()
....
end sub

Err_abcd:                           
....
End Sub
0 голосов
/ 25 ноября 2010

Я не могу придумать умного способа сделать это.У меня обычно есть класс / функция обработки ошибок, так что я могу использовать «on error goto», чтобы передать ошибку в нижний блок, а затем вызвать функцию обработки ошибок.Преимущество этого в том, что хорошо иметь централизованный обработчик ошибок, но вы также можете настроить его, поэтому в моем случае я передаю имя сбойной процедуры.Это не красиво, но вы могли бы, если бы вы действительно хотели передать либо набор переменных (в зависимости от того, сколько у вас есть), либо настроить что-то, чтобы идентифицировать переменную на основе номера строки (которую вы должны добавить вручную) ...)

on error goto err

'Code

err:

ErrorHandeler err, "String with Procedure name"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...