Составной оператор If генерирует ошибку времени выполнения - PullRequest
0 голосов
/ 11 февраля 2020

У меня есть код, который перемещает письмо в папку и помечает его как прочитанное, когда я присваиваю категорию электронной почте.

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

Когда я отлаживаю, это показывает следующее
Debug

Private WithEvents objInboxFolder As Outlook.Folder
Private WithEvents objInboxItems As Outlook.Items

'Process inbox mails
Private Sub Application_Startup()
    Set objInboxFolder = Outlook.Application.Session.GetDefaultFolder(olFolderInbox)
    Set objInboxItems = objInboxFolder.Items
End Sub

'Occurs when changing item
Private Sub objInboxItems_ItemChange(ByVal Item As Object)
    Dim objMail As Outlook.MailItem
    Dim objTargetFolder As Outlook.Folder

    If TypeOf Item Is MailItem And Item.Categories <> "" Then
       Set objMail = Item

       'Move mails based on color category
       If InStr(objMail.Categories, "Personal") > 0 Then
          Set objTargetFolder = Application.Session.GetDefaultFolder(olFolderInbox).Folders("Personal")
          objMail.Move objTargetFolder
       Else
          objMail.UnRead = False
          objMail.Save
          Set objTargetFolder = Application.Session.GetDefaultFolder(olFolderInbox).Folders("01 Actioned")
          objMail.Move objTargetFolder
       End If

    End If
End Sub

1 Ответ

0 голосов
/ 11 февраля 2020

Рассмотрим If TypeOf Item Is MailItem And Item.Categories <> "".

VBA оценивает каждый член логического выражения перед тем, как объединить их для получения окончательного результата. Он не проверяет TypeOf Item Is MailItem и продолжается, только если Item является MailItem. Если Item не является MailItem, Item.Categories завершится неудачей.

Попробуйте:

If TypeOf Item Is MailItem Then
  If Item.Categories <> ""
    . . . .
  End If
End If
...