2017-01-06 22 views
4

添付ファイルを削除する必要があるマクロを作成しています。私のデバッグセッションからは、うまくいくかのように見えます。ブレークポイントがヒットし、それがメッセージオブジェクトを認識している:VBA - Outlookが添付ファイルを削除していない

enter image description here

私はこれは少し愚かな音を知っている、しかし、奇妙なことに、私がブレークポイントを設定した場合に動作するようだ、と表現/時計を開いて、それ以外はそうではない。

私はかなり長い間このことに苦労してきました。私はどんな指導にも感謝します。

Private Sub Application_NewMailEx(ByVal EntryIDCollection As String) 

Dim header As String 
Dim objNewMail As Outlook.MailItem 
Dim Item As Object 
Dim count As Integer 


    Dim objInbox As Outlook.Folder 
    Set objInbox = Outlook.Session.GetDefaultFolder(olFolderInbox) 

    Dim entryIDs 
    entryIDs = Split(EntryIDCollection, ",") 
    Dim i As Integer 

    For i = 0 To UBound(entryIDs) 
     Set objNewMail = Application.Session.GetItemFromID(entryIDs(i)) 
       If objNewMail.Attachments.count > 0 Then 
        header = GetHeader(objNewMail) 
       If DoesIPMatch(header) <> True Then 
        DeleteMessage (objNewMail) 
       ElseIf IsAttachmentPDF(objNewMail) <> True Then 
        For count = 1 To objNewMail.Attachments.count 
         objNewMail.Attachments.Remove (count) 
        Next 
       End If 
      End If 
    Next 

End Sub 
+2

おそらく問題はありませんが、 '(count) 'のかっこは冗長です。 'objNewMail.Attachments.Remove count'で十分です。 'count'は評価されずに値渡される必要もありません(それは余分な括弧の働きです)。それはすでに値です。 –

+0

ありがとう!私はVBAの人ではありません(C#galの方が多いので)、私はその観察を間違いなく感謝します。 – KellyMarchewa

+1

また、インデントが壊れている/混乱しています。 * [indententer *]の使用を検討してください - 私の[Rubberduck](https://github.com/rubberduck-vba/Rubberduck/releases)アドインには、非常に人気の高い* Smart Indenter *のポート(64ビットホストで動作)アドイン...これはC#で書かれていますが、あなたが楽しいOSSプロジェクトを探しているのであれば、;-) –

答えて

3

あなたはそれが常に逆の順序で実行する必要があり、コレクションから項目を削除する場合それ以外の場合は、あなたのカウンタ変数をインデックスし直す必要があり、それは厄介なコードになり、最も可能性の高い犯人として、これを試してみてください。

あなたが(添付ファイルを削除することによって、例えば)それを変更した後にまた別の方法として

For count = objNewMail.Attachments.count to 1 Step - 1 
    objNewMail.Attachments.Remove count 
Next 
objNewMail.Save '## Not sure if this is necessary 

objNewMailアイテムを保存する必要があるかもしれない:

With objNewMail.Attachments 
    While .Count > 0 
     .Remove 1 
    Wend 
End With 
objNewMail.Save 
+0

うわー、私はそれがループの順序を逆転させて、またはsaveを呼び出すが、これはうまくいった。私はとても長い間戦ってきたので、心から感謝しています。 – KellyMarchewa

+0

おそらくそれを修正した 'Save'でしょう。私はあなたのスクリーンショットを見て、サンプルアイテムは1つの添付ファイルしか持たないので、2つ以上の添付ファイルがある場合にのみソートは影響を受けません。 –

関連する問題