10

VBAコードを使用してOutlook2000からMailMessageを完全に削除する方法を探しています。削除済みアイテムを空にするために2番目のループを実行せずにこれを実行したいと思います。

SHIFT基本的に、メッセージをクリックして+を押すUIメソッドと同等のコードを探していますDELETE

そんなことありますか?

4

5 に答える 5

14

最初に移動してから削除してみてください(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

RDO

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
于 2009-07-10T18:03:04.370 に答える
2

最初の方法と同様に、すべての中で最も単純なソリューション:

  FindID = deleteme.EntryID
  deleteme.Delete
  set deleteme = NameSpace.GetItemFromID(FindID)
  deleteme.Delete

それを2回行うと、それは永久になくなり、パフォーマンスを低下させるループはなくなります。(デフォルトのストアにない場合、NameSpaceは特定の名前空間変数にすることができます。)これは、ストア間で削除しない場合にのみ機能することに注意してください。これにより、EntryIDが変更されたり、完全に削除されたりする可能性があります。

于 2010-04-21T05:08:18.530 に答える
2

これは古いスレッドだと知っていますが、最近、これを行うマクロを作成することになったので、共有したいと思いました。Removeメソッドが完全に削除されているように見えることがわかりました。私はこのスニペットを使用しています:

While oFilteredItems.Count > 0
    Debug.Print "   " & oFilteredItems.GetFirst.Subject
    oFilteredItems.Remove 1
Wend

まず、いくつかの基準でフィルタリングされたアイテムのリストから始めます。次に、それがなくなるまで、一度に1つずつ削除します。

HTH

于 2012-09-14T14:10:17.213 に答える
1

次の方法を使用できます。基本的には、現在行っているようにすべての電子メールメッセージを削除してから、この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();
于 2009-10-21T03:11:40.030 に答える
1

最近、すべての連絡先を完全に削除する必要がありました。これは私にとってはうまくいきました(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
于 2019-10-02T14:16:59.287 に答える