Размещение On Error Resume Next
и On Error GoTo 0
вокруг всего блока редко (никогда?) Является хорошей идеей во время разработки или исследования. Они просто означают, что вы не знаете, какое утверждение вызывает ошибку, и ограничивает вашу способность выявлять и исправлять ошибку.
Судя по полученному изображению, первый элемент не имеет EntryID
, * 1006. *, Recipients
или Sender
. Моей первой реакцией было то, что это был черновик, и эти свойства еще не были назначены. Я не нашел этот убедительный ответ, потому что, по моему опыту, свойства, которые не были инициализированы, имеют допустимые значения, такие как «» или 0. Затем я увидел «Отзыв» в теме. Я на пенсии и больше не являюсь корпоративным пользователем, но я помню, что электронные письма отзывались. Я не могу расследовать без доступа к этой функции. Однако, согласно документации, которую я могу найти, предмет будет ReportItem
, а не MailItem
. ReportItem
имеет EntryId
, но не имеет ReceivedTime
, Recipients
или Sender
.
. Мое предложение:
Удалить On Error Resume Next
и On Error GoTo 0
.
Добавьте что-то вроде:
If TypeOf obj_mail Is MailItem Then
' Output MailItem properties
ElseIf TypeOf obj_mail Is ReportItem Then
' Output ReportItem properties
Else
' Report unexpected item
End If
Если вы по-прежнему получаете ошибку, выполнение остановится в операторе, выдающем ошибку. Наведите указатель мыши на оператор, чтобы узнать, какой объект или свойство является причиной ошибки. Используйте Watch, чтобы исследовать этот объект и обнаружить, что не так, как вы ожидаете. Это должно позволить вам добавить код, который позволяет избежать ошибки; возможно, это другой тип предмета.
Если вы не можете избежать ошибки, попробуйте что-то вроде этого:
Dim ErrNum As Long
Dim ErrDesc As String
: : :
On Error Resume Next
Statement giving the error
ErrNum = Err.Number
ErrDesc = Err.Description
On Error GoTo 0
If ErrNum <> 0 Then
Code to handle, report or ignore error
Else
Code to handle normal situation
End If
Примечание: по моему мнению, это правильный способ использования On Error Resume Next
и On Error GoTo 0
. Разместите их вокруг одного утверждения. Сохраните Err.Number
в переменной, потому что On Error GoTo 0
очищает Err.Number
. Проверьте ErrNum
и примите соответствующие меры.