Несоответствие типа в цикле mailitem

#vba #outlook #mailitem

#vba #outlook #mailitem

Вопрос:

Outlook 2010 VBA. Пытаюсь найти помеченные сообщения во всех моих папках. Создал это:

 Private Sub flagrecurse(fold As Variant)

Dim olItem As MailItem
Dim nxtfold As Folder
Dim olFoldVar As Variant

'Test for which folder is being checked
MsgBox (fold.Name)

If fold.Folders.Count > 0 Then
    For Each nxtfold In fold.Folders
        Set olFoldVar = nxtfold
        flagrecurse olFoldVar
    Next nxtfold
Else
    For Each olItem In fold.Items
         'Test for which item is being checked
         If TypeName(olItem) = "MailItem" Then
            MsgBox (olItem.Subject)
            With olItem
                If .FlagRequest <> "" Or .IsMarkedAsTask Then
                    '.TaskDueDate = Now
                    'Sets a reminder today, in case one wasn't set
                    If Not (.ReminderSet) Then
                        .ReminderSet = True
                        .ReminderTime = Now   2 / 24
                        .Save
                    End If
                End If
            End With
        End If
    Next olItem
End If
 

Завершить вложенный

Проблема в том, что в моем почтовом ящике 744 элемента, он проходит через 8 или 9, а затем выдает мне «Несоответствие типов». Когда я отлаживаю, он помечает «Следующий элемент», и когда я проверяю значение «Элемент», он принимает значение «ничего».

Что я делаю не так?

Ответ №1:

Вы предполагаете, что в папке могут быть только объекты MailItem. У вас также может быть ReportItem, MettingRequestItem и т.д. Объявите olItem как универсальный объект и проверьте, что свойство класса равно 43 (olMail).

Комментарии:

1. Я знал, что в папке есть другие объекты. Мое предположение состояло в том, что for each будет рассматривать только те элементы, которые соответствуют типу переменной, которую я использовал (вместо того, чтобы делать переменную null). В любом случае, ваше предложение сработало. Спасибо!

2. Чертова легенда. Это меня расстраивало!