Одна вещь, которая бросается в глаза, это то, что вы используете команду set
для типа значения (субъект, который является строкой), который вам не нужен и должен вызвать ошибку.
Dim Item, OItem As Outlook.MailItem
Dim ISub, OSub As String
For Each Item In objIFolder.Items
ISub = Right(CStr(Item.Subject), Len(Item.Subject) - 6)
ISub = CStr(ISub)
For Each OItem In objOFolder.Items
OSub = Right(CStr(OItem.Subject), Len(OItem.Subject) - 6)
ISub = CStr(OSub)
If StrComp(ISub = OSub, 1) = 0 Then
OItem.Delete
End If
Next OItem
Next Item
Еще одно наблюдение ... Эта строка:
ISub = CStr(OSub)
Мне кажется, что это заставит следующее условие всегда быть верным. Если я не понимаю, это кажется ошибкой.
Я также думаю, что преобразование String не нужно, поскольку тема уже является строкой.
Это будет моя окончательная версия:
Dim objNS As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
Set objNS = GetNamespace("MAPI")
Set objFolder = objNS.Folders.GetFirst
Set objIFolder = objFolder.Folders("Inbox")
Set objOFolder = objFolder.Folders("Outbox")
Dim Item, OItem As Outlook.MailItem
Dim ISub, OSub As String
For Each Item In objIFolder.Items
ISub = Right(Item.Subject, Len(Item.Subject) - 6)
For Each OItem In objOFolder.Items
OSub = Right(OItem.Subject, Len(OItem.Subject) - 6)
If ISub = OSub Then
OItem.Delete
End If
Next OItem
Next Item