当使用 ActiveX 部件时,处理错误的代码尤为重要,因为来自部件的代码用于 Visual Basic 应用程序的内部。在一切可能的地方,应当包含处理部件可能产生错误的代码。例如,检查用户无意中关闭一个部件应用程序而引起的错误,是一个好习惯:
Function StartWord() '启动Microsoft Word。On Error Goto ErrorTrap'声明Microsoft Word Application变量'和为错误陷阱使用的整型变量。Dim wdApp As Word.ApplicationDim iTries As Integer'赋值对象引用。Set wdApp = New Word.Application'释放对象变量。Set wdApp = NothingExit FunctionErrorTrap:'因Microsoft Word不能启动而产生的错误的陷阱。Select Case Err.NumberCase 440 ' Automation错误iTries = iTries + 1'做五次重新启动Word的尝试。If iTries < 5 ThenSet wdApp = New Word.ApplicationResumeElseErr.Raise Number:=VBObjectError + 28765, _Description:= "Couldn't restart Word"End IfCase ElseErr.Raise Number:= Err.NumberEnd SelectEnd 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 变成无效,该变量将仍保持有效的对象引用。在这种情况下,使用错误处理程序捕获当代码要使用该变量时产生的错误。
详细信息 关于特定应用程序可能送回的错误的信息,请参阅应用程序的文档。关于捕获错误的更详细的信息,请参阅“调试代码和处理错误”。