我正在更改文档模板宏。我不知道该怎么做的一件事是自定义错误消息。例如,文档中的错误消息是
“错误!未找到图表条目”
我想更改它以显示其他内容。是否可以使用 Word VBA 或 VBScript 执行此操作?
是否可以将其放入某种全局错误处理程序中?– 克雷格
有可能的。这是一个非常粗略的例子。
在标准模块中:
Sub HandleErr(ErrNo As Long)
Select Case ErrNo
Case vbObjectError + 1024
MsgBox "No table of figures entries found.", vbOKOnly + vbCritical
Case vbObjectError + 1034 To vbObjectError + 4999
MsgBox "Still no table of figures entries found.", vbOKOnly + vbCritical
Case Else
MsgBox "I give up.", vbOKOnly + vbCritical, _
"Application Error"
End Select
End Sub
一些代码:
Sub ShowError()
Dim i As Integer
On Error GoTo Proc_Err
'VBA Error
i = "a"
'Custom error
If Dir("C:\Docs\TableFigs.txt") = "" Then
Err.Raise vbObjectError + 1024
End If
Exit_Here:
Exit Sub
Proc_Err:
If Err.Number > vbObjectError And Err.Number < vbObjectError + 9999 Then
HandleErr Err.Number
Else
MsgBox Err.Description
End If
End Sub
如果要在 VBA 中捕获特定的错误类型,一种方法是使用 On Error Resume Next 然后在要捕获的操作之后的行上测试错误消息,例如:
On Error Resume Next
' try action
If Err.Number <> 0 Then
' handle w/ custom message
Err.Clear
End If
如果您知道确切的错误编号 ( If Err.Number = N Then
),那当然会更好。
好吧,如果您正在谈论拥有一个自定义消息框 - 这很容易。在 VBA 帮助中查找“msgbox”以获得更好的信息。
Msgbox("Error! No table of figures entries found",16,"Error")
16 使其成为“关键”信息。
如果您正在谈论错误捕获,那么您将需要这样的代码:
On Error Resume Next
n = 1 / 0 ' this causes an error
If Err.Number <> 0 Then
n = 1
if Err.Number = 1 Then MsgBox Err.Description
End If
当抛出错误时,会为 Err 对象提供一个数字和描述。