Застрял с какой-то странной ошибкой в ​​VBA - PullRequest
0 голосов
/ 27 января 2012

Я делаю проект в PowerPoint 2007 автоматизации. В этом я использую макропрограммирование (VBA). Я получаю следующую ошибку при запуске макроса.

Err.Number= -2147024809 (80070057)

но моя проблема не в ошибке, потому что я хочу перехватить эту ошибку и, основываясь на этой ошибке, хочу выполнить какое-то действие.

Вот почему я пытаюсь так написать код для выдачи ошибки:

OnError Goto Err:
'some code

Err:
If Err.number = -2147024809 (80070057) then
'do something
end if
Resume next

Итак, если я напишу номер ошибки таким образом, это не разрешит. это дает ошибку.

и главное, когда ошибка возникает, когда она не переходит в «Err:». Это просто всплывающая ошибка с опциями «End» и «Debug».

Ответы [ 3 ]

1 голос
/ 27 января 2012

Часть сообщения об ошибке 80070057 является шестнадцатеричной версией отрицательного числа без знака -2147024809. Удалите эту часть кода, и у вас все будет хорошо, если вы хотите отслеживать шестнадцатеричную версию числа (может быть полезно для исследования ошибок через Google и т. Д.), Просто добавьте ее в качестве комментария.

1 голос
/ 27 января 2012

Хотя это, кажется, работает, я бы с осторожностью использовал зарезервированное имя объекта (Err) в качестве метки, с одной стороны.

On Error GoTo ErrorHandler

' Your code here

' Make sure you don't hit the errorhandler when there's
' no error:
NormalExit:
Exit Sub ' or Function, whichever this is

ErrorHandler:
If err.Number = 123456788 Then
    ' Take corrective action
    ' then continue
    Resume Next
End If
' Trap other specific or general errors here

' Then make sure you know where you're going to exit:
Resume NormalExit

Если вам нужно перехватить очень конкретные ошибки, которые могутпроисходят только в определенных местах в вашем коде, вы также можете сделать локальный обработчик ошибок:

On Error Resume Next

' Some code that might cause problems

' Did it throw the error you're trying to trap?
If Err.Number = 12398745 then 
  ' Corrective action
End If

' And now we return to our regularly scheduled error trapping
On Error GoTo ErrorHandler
1 голос
/ 27 января 2012

Номера ошибок являются числовыми: -2147024809, просто отображается для вас в виде строки "-2147024809 (80070057)" для ясности (80070057) - номер ошибки в шестнадцатеричном формате.

Вы хотите;

if err.number = -2147024809 then ....

или, если вы так решите,

if err.number = &h80070057 then ....
...