处理 ActiveX 部件中的运行时错误

当使用 ActiveX 部件时,处理错误的代码尤为重要,因为来自部件的代码用于 Visual Basic 应用程序的内部。在一切可能的地方,应当包含处理部件可能产生错误的代码。例如,检查用户无意中关闭一个部件应用程序而引起的错误,是一个好习惯:

Function StartWord()
'启动 Microsoft WordOn Error Goto ErrorTrap

   '声明 Microsoft Word Application 变量
   '和为错误陷阱使用的整型变量。
   Dim wdApp As Word.Application
   Dim iTries As Integer

   '赋值对象引用。
   Set wdApp = New Word.Application

   '释放对象变量。
   Set wdApp = Nothing

   Exit Function

ErrorTrap:
   ' Microsoft Word 不能启动而产生的错误的陷阱。
   Select Case Err.Number
      Case 440               ' Automation 错误
         iTries = iTries + 1
         '做五次重新启动 Word 的尝试。
         If iTries < 5 Then
            Set wdApp = New Word.Application
            Resume
         Else
            Err.Raise Number:=VBObjectError + 28765, _
            Description:= "Couldn't restart Word"
         End If
      Case Else
         Err.Raise Number:= Err.Number
   End Select
End Function

如果在前面的例子中,有 error 440 以外的错误发生,过程显示该错误并产生一个新错误。提供对象的应用程序可能把其自身的错误传回去。有些情况下,应用程序可能使用与 Visual Basic 用于另一错误的同样的错误代码。在这些情况下,应在可能产生错误的每行后使用 On Error Resume Next 并立即检查错误。这种错误检查称作在线错误处理

测试对象引用

在代码中使用对象变量之前,可能想确认变量是否拥有一个有效的对象引用。可以使用 Is Nothing 来确定对象引用是否已经赋给了变量。例如,下列代码检查对象引用是否已经赋给了变量 wdDoc

If wdDoc Is Nothing Then MsgBox "No object reference."

但是,Is Nothing 不能检测有效对象引用是否已变成无效。例如,如果将 Microsoft Word 对象引用赋予对象变量,而 Microsoft Word 变成无效,该变量将仍保持有效的对象引用。在这种情况下,使用错误处理程序捕获当代码要使用该变量时产生的错误。

详细信息 关于特定应用程序可能送回的错误的信息,请参阅应用程序的文档。关于捕获错误的更详细的信息,请参阅“调试代码和处理错误”。