Сообщения об ошибках макросов Word - PullRequest
0 голосов
/ 21 октября 2008

Я изменяю макросы шаблона документа. Единственное, что я не могу выяснить, как это сделать, это настроить сообщения об ошибках. Например, сообщение об ошибке в документе:

"Ошибка! Записи таблицы не найдены"

Я хотел бы изменить это, чтобы отобразить что-то еще. Возможно ли это сделать с помощью Word VBA или VBScript?

Ответы [ 3 ]

1 голос
/ 21 октября 2008

Можно ли поместить это в некоторые вид глобального обработчика ошибок? - Крейг

Это возможно. Вот очень грубый пример.

В стандартном модуле:

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
0 голосов
/ 21 октября 2008

Ну, если вы говорите о наличии собственного окна сообщения - это легко. Посмотрите 'msgbox' в справке VBA для лучшей информации.

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 присваивается номер и описание.

0 голосов
/ 21 октября 2008

Если вы хотите перехватить определенный тип ошибки в 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), это было бы лучше, конечно.

...