Tente o seguinte:
Public Sub Mark_Unread_If_No_Category()
Dim objNS As Outlook.NameSpace: Set objNS = GetNamespace("MAPI")
Dim olFolder As Outlook.MAPIFolder: Set olFolder = objNS.GetDefaultFolder(olFolderInbox)
Dim Item As Object
For Each Item In olFolder.Items
If Item.Class = 43 Then ' 43 = an email
Dim oMail As Outlook.MailItem: Set oMail = Item
If oMail.Categories = "" Then
Debug.Print "Marking as unread: " & oMail.Subject
oMail.UnRead = True
oMail.Save
End If
Set oMail = Nothing
End If
DoEvents ' So Outlook doesn't lock up whilst running
Next
Set olFolder = Nothing
Set objNS = Nothing
End Sub
Sei que ele procura corretamente na caixa de entrada e encontra corretamente os emails sem as categorias (o Debug.Print
confirma isso), mas não verifiquei se esses emails não foram lidos.
Como resultado, você deve fazer backup da sua caixa de entrada antes de tentar.