Я получаю случайную ошибку времени выполнения 13 (несоответствие типа), выполняющую следующую подпрограмму. Эта процедура работает большую часть времени. Папка, переданная в качестве аргумента, является легитимной во время сбоя. Из того, что я вижу в отладчике, objitem не хватает некоторых полей во время выполнения. После этого в отладчике точки прерывания, я могу сразу одношаговый (повторное выполнение строки нарушения), и нет ошибки.outlook Ошибка выполнения сценария VBA 13 случайным образом при повторении писем в общей папке
Я попытался использовать 'on error goto' для спящего режима, а затем повторить различные строки, и ошибка сохраняется до тех пор, пока она не остановится в отладчике.
Я также попытался изменить между формулами для ii и для каждой формы команд цикла.
Я также временно отключил антивирус.
Я повторяю большое количество общих папок. Мой клиент Outlook 2003 работает под XP, и я привязан к серверу Exchange версии 7654.
Может ли кто-нибудь сказать мне, что я не могу сделать (или если то, что я пытаюсь, невозможно)?
Код ниже изменен в соответствии с предложениями @dmitry и теперь работает.
Sub SearchFolders(objFolder As Outlook.MAPIFolder)
Dim objFolders As Outlook.Folders
Dim subFolder As Outlook.MAPIFolder
Dim Objitem As Outlook.MailItem
Dim ii As Integer
Dim ThisItem As Object
Dim Items As Outlook.Items
' Recurse through all subfolders
Set objFolders = objFolder.Folders
For Each subFolder In objFolders
Call SearchFolders(subFolder)
Next subFolder
' Search the emails
Set Items = objFolder.Items
For ii = 1 To Items.Count
Set ThisItem = Items.item(ii)
If ThisItem.Class = olMail Then
If VarType(ThisItem) = 9 Then GoTo NextdblLoop
Set Objitem = ThisItem
CheckEmailForErrorReports (objFolder.Items(ii))
Set Objitem = Nothing
End If
Set ThisItem = Nothing
NextdblLoop:
Next ii
Set Items = Nothing
End Sub
Сценарий остановился неудачу случайно, и я смог отладить его с помощью изменения. Я нашел две особенности: 1) Нужно добавить 'Если VarType (ThisItem) = 9 Затем GoTo NextdblLoop' before 'Установить Objitem = ThisItem' 2) Необходим этот синтаксис для вызова подпрограммы: 'CheckEmailForErrorReports (objFolder.Items (ii)) ' – trindflo