VBAコードを使用してOutlook2000からMailMessageを完全に削除する方法を探しています。削除済みアイテムを空にするために2番目のループを実行せずにこれを実行したいと思います。
SHIFT基本的に、メッセージをクリックして+を押すUIメソッドと同等のコードを探していますDELETE。
そんなことありますか?
最初に移動してから削除してみてください(2000年の一部のパッチで機能します)。または、RDOまたはCDOを使用して作業を行ってください(インストールする必要があります)。
Set objDeletedItem = objDeletedItem.Move(DeletedFolder)
objDeletedItem.Delete
CDOウェイ
Set objCDOSession = CreateObject("MAPI.Session")
objCDOSession.Logon "", "", False, False
Set objMail = objCDOSession.GetMessage(objItem.EntryID, objItem.Parent.StoreID)
objMail.Delete
set objRDOSession = CreateObject("Redemption.RDOSession")
objRDOSession.MAPIOBJECT = objItem.Session.MAPIOBJECT
set objMail = objRDOSession.GetMessageFromID(objItem.EntryID>)
objMail.Delete
また、メッセージを削除する前に最初にマークを付け、削除済みアイテムフォルダーをループして、もう一度メッセージを削除することもできます。Userpropertyを使用してマークを付けます。
objMail.UserProperties.Add "Deleted", olText
objMail.Save
objMail.Delete
削除したアイテムをループして、そのuserpropを探します
Set objDeletedFolder = myNameSpace.GetDefaultFolder(olFolderDeletedItems)
For Each objItem In objDeletedFolder.Items
Set objProperty = objItem.UserProperties.Find("Deleted")
If TypeName(objProperty) <> "Nothing" Then
objItem.Delete
End If
Next
最初の方法と同様に、すべての中で最も単純なソリューション:
FindID = deleteme.EntryID
deleteme.Delete
set deleteme = NameSpace.GetItemFromID(FindID)
deleteme.Delete
それを2回行うと、それは永久になくなり、パフォーマンスを低下させるループはなくなります。(デフォルトのストアにない場合、NameSpaceは特定の名前空間変数にすることができます。)これは、ストア間で削除しない場合にのみ機能することに注意してください。これにより、EntryIDが変更されたり、完全に削除されたりする可能性があります。
これは古いスレッドだと知っていますが、最近、これを行うマクロを作成することになったので、共有したいと思いました。Removeメソッドが完全に削除されているように見えることがわかりました。私はこのスニペットを使用しています:
While oFilteredItems.Count > 0
Debug.Print " " & oFilteredItems.GetFirst.Subject
oFilteredItems.Remove 1
Wend
まず、いくつかの基準でフィルタリングされたアイテムのリストから始めます。次に、それがなくなるまで、一度に1つずつ削除します。
HTH
次の方法を使用できます。基本的には、現在行っているようにすべての電子メールメッセージを削除してから、この1行を呼び出して、削除済みアイテムフォルダーを空にします。コードはjscriptにありますが、本当に必要な場合は翻訳できます:)
var app = GetObject("", "Outlook.Application"); //use new ActiveXObject if fails
app.ActiveExplorer().CommandBars("Menu Bar").Controls("Tools").Controls('Empty "Deleted Items" Folder').Execute();
最近、すべての連絡先を完全に削除する必要がありました。これは私にとってはうまくいきました(Outlook2016)。ゴミ箱フォルダ内のアイテムへの新しい参照を取得しました。それ以外の場合は、「削除済み」などと表示されます。最後から行くだけで、最近移動したアイテムがそこにあります。次に、Deleteを呼び出すと、完全に削除されます。このスニペットはループで使用できます。
myContacts(i).Move (trashFolder)
trashCount = trashFolder.Items.Count
For j = trashCount To 1 Step -1
Set trashItem = trashFolder.Items(j)
If trashItem.MessageClass = "IPM.Contact" Then
trashItem.Delete
Else
Exit For
End If
Next