bugfix> excel > 投稿

私はコーディングが初めてです。件名のキーワードと受信時間を使用して、特定のExcel添付ファイルをOutlookの受信トレイ(「朝のメール」)に保存する方法を知りたい。

同じドライブフォルダーに保存するためのExcel添付ファイル付きの毎日5つの新しいメールを受信します。

受信する時間は、昨夜か今朝早めのいずれかです。

受信した5つのファイルすべての名前と受信時刻は異なります。

受信ボックスは空ではありません。昨日または2週間前に保存した内容を保存したくありません。

Sub SaveAttachments()
    Dim ol As Outlook.Application
    Dim ns As Outlook.Namespace
    Dim fol As Outlook.Folder
    Dim i As Object
    Dim mi As Outlook.MailItem
    Dim at As Outlook.Attachment
    Set ol = New Outlook.Application
    Set ns = ol.GetNamespace("MAPI")
    Set fol = ns.Folders(1).Folders("Morning Emails")
    For Each i In fol.Items
        If i.Class = olMail Then
            Set mi = i
            If mi.Attachments.Count > 0 Then
                For Each at In mi.Attachments
                    at.SaveAsFile "C:\Users\nader\OneDrive\Documents\" & _
                      at.Filename & Format(mi.ReceivedTime, " MM-DD-YYYY")
                Next at   
            End If
        End If
    Next i
End Sub

「行の試行に失敗しました;オブジェクトが見つかりませんでした」行: Set fol = ns.Folders(1).Folders("Morning Emails") 、Outlookの受信トレイの下にそのサブフォルダーを作成しましたが。

回答 1 件
  • Set ol = New Outlook.Application

    コードに新しいOutlookアプリケーションインスタンスを作成する必要はありません。 Application を使用する  プロパティを使用して、Outlook VBAマクロでホストアプリケーションインスタンスを取得します。

    NewMailEx の取り扱いをお勧めします   Application のイベント  クラス。このイベントは、Microsoft Outlookによって処理される受信アイテムごとに1回発生します。アイテムは、 MailItem など、いくつかの異なるアイテムタイプのいずれかです。 、 MeetingItem 、または SharingItem 。ザ・ EntryIDsCollection  文字列には、そのアイテムに対応するエントリIDが含まれます。

    NewMailEx  イベントは、受信トレイに新しいメッセージが到着したとき、およびクライアントルールの処理が発生する前に発生します。 EntryIDCollection で返されたエントリIDを使用できます  NameSpace.GetItemFromIDメソッドを呼び出してアイテムを処理する配列。

    Private Sub outApp_NewMailEx(ByVal EntryIDCollection As String)    
          Dim itm as Object
          Set itm = NS.GetItemFromID(EntryIDCollection)
          Debug.Print "mail received"
          If itm.Class = olMail Then
            Dim it as Outlook.MailItem
            Set it = itm       
            if it.Subject = "your subject" then 
              If it.Attachments.Count > 0 Then
                For Each at In mi.Attachments
                    at.SaveAsFile "C:\Users\nader\OneDrive\Documents\" & _
                        at.Filename & Format(mi.ReceivedTime, " MM-DD-YYYY")
                Next at
              End If
            End If
          End If
    End Sub
    
    

あなたの答え