代码之家  ›  专栏  ›  技术社区  ›  Alex Gordon

vba:将变量传递到错误句柄

vba
  •  1
  • Alex Gordon  · 技术社区  · 14 年前

    我有一个声明:

    on error go to label
    

    但是,我想将导致错误的变量传递到标签中

    这可能吗?

    4 回复  |  直到 14 年前
        1
  •  3
  •   dcp    14 年前

    首先,我想你的意思是:

    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对象的Raise方法引发自定义错误 剖面图 this link 更多信息。

        2
  •  4
  •   thedev    14 年前

    您可以使用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
  •  0
  •   Cunning    14 年前

    我想不出一个聪明的办法来做这件事。我通常有一个错误处理类/函数,这样我就可以使用“on error goto”将错误传递到底部块,然后调用错误处理函数。这样做的好处是有一个集中的错误处理程序很好,但是你也可以自定义它,所以在我的例子中,我传递崩溃的过程的名称。这并不漂亮,但是如果你真的想传递一个变量集合(取决于你有多少)或者设置一些东西来根据行号识别变量(你必须添加manauly…)

    on error goto err
    
    'Code
    
    err:
    
    ErrorHandeler err, "String with Procedure name"
    
        4
  •  0
  •   Alan Aruquipa    8 年前

    声明全局变量并在代码和错误代码中使用它们。

    Public global_variable1 As Integer
    Public global_variable2 As String
    
    Private Sub Btn1234_Click()
    ....
    end sub
    
    Err_abcd:                           
    ....
    End Sub