コードの最初の問題は、使用する適切なループではありません。(VBA のほとんどすべてのものを) 削除する場合は、最後の要素から最初の要素までコレクションをループする必要があります。そうでない場合は、コレクションの順序を変更します。最初の要素を削除した後 >> 2 番目の要素は 1 番目の位置に移動され、削除されません。
したがって、このコードは からすべてのアイテムを削除する必要がありますDeltetedItems folder
:
Sub Delete_all_from_dust_bin()
Dim myFolder As Outlook.Folder
Set myFolder = Application.GetNamespace("MAPI"). _
GetDefaultFolder(olFolderDeletedItems)
Dim i As Long
For i = myFolder.items.Count To 1 Step -1
myFolder.items(i).Delete
Next i
End Sub
明らかに、他のフォルダーから削除するための同様のコードを準備できます。アイテムを確実に削除するには、両方の削除ループを実行します。
MailItem.Delete Method
MSDN からのいくつかの追加のコメント:
Delete メソッドは、コレクション内の単一のアイテムを削除します。フォルダーの Items コレクション内のすべてのアイテムを削除するには、フォルダー内の最後のアイテムから順に各アイテムを削除する必要があります。たとえば、フォルダ AllItems のアイテム コレクションでは、フォルダ内に n 個のアイテムがある場合、AllItems.Item(n) でアイテムの削除を開始し、AllItems.Item(1) を削除するまで毎回インデックスを減らします。 .
OPからのいくつかのコメントのために編集します。
一部の項目 (すべてではない) を削除する必要がある場合でも、上で示したループ タイプを使用することを忘れないでください。他のストアの他のものを参照する必要がある場合はDeletedItems folder
、次の方法でこのフォルダーを見つけることができます。
'with index reference
Application.GetNamespace("MAPI").Stores(2).getdefaultfolder(olFolderDeletedItems)
'with name reference
Application.GetNamespace("MAPI").Stores("Business Mail").getdefaultfolder(olFolderDeletedItems)
これがすべての Outlook バージョンで機能するかどうかはわかりませんが、Outlook 2010 では機能します。