Outlookから添付ファイルをダウンロードしてExcelで開く 質問する

Outlookから添付ファイルをダウンロードしてExcelで開く 質問する

Excel の VBA を使用して、Outlook メールの Excel スプレッドシートの添付ファイルをダウンロードして開こうとしています。どうすればよいでしょうか。

  1. ダウンロードOutlook の受信トレイにある最初のメール (最新のメール) の唯一の添付ファイル
  2. 保存指定されたパスのファイル内の添付ファイル(例:「C:...」)
  3. 添付ファイルの名前を次のように変更します。現在の日付+以前のファイル名
  4. メールを「C:...」のようなパスを持つ別のフォルダに保存します。
  5. Outlook でメールを「既読」としてマークする
  6. 開けるExcelの添付ファイル

また、以下を個別の変数に割り当てられた個別の文字列として保存できるようにしたいと考えています。

  • 送信者のメールアドレス
  • 受領日
  • 送信日
  • 主題
  • メールのメッセージ

ただし、別の質問で質問したり、自分で調べたりしたほうがよいかもしれません。

私が現在持っているコードはオンラインの他のフォーラムからのもので、あまり役に立たないかもしれません。ただし、私が取り組んでいるコードの一部を以下に示します。

Sub SaveAttachments()
    Dim olFolder As Outlook.MAPIFolder
    Dim att As Outlook.Attachment
    Dim strFilePath As String
    Dim fsSaveFolder As String

    fsSaveFolder = "C:\test\"

    strFilePath = "C:\temp\"

    Set olFolder = Application.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)

    For Each msg In olFolder.Items
        While msg.Attachments.Count > 0
            bflag = False
            If Right$(msg.Attachments(1).Filename, 3) = "msg" Then
                bflag = True
                msg.Attachments(1).SaveAsFile strFilePath & strTmpMsg
                Set msg2 = Application.CreateItemFromTemplate(strFilePath & strTmpMsg)
            End If
            sSavePathFS = fsSaveFolder & msg2.Attachments(1).Filename


    End If
End Sub

ベストアンサー1

完全なコードを一度に提供することもできますが、それでは学習に役立ちません ;) では、リクエストを分割して、1 つずつ対処しましょう。これは非常に長い投稿になるので、しばらくお待ちください :)

合計 5 つのパートがあり、7 つのポイント (はい、6 つではなく 7 つです) すべてをカバーするため、7 番目のポイント用に新しい質問を作成する必要はありません。


パート1

  1. Outlookへの接続の作成
  2. 未読メールがあるか確認する
  3. Sender email Address、、、、などDate receivedの詳細を取得していますDate SentSubjectThe message of the email

このコード例を参照してください。Excel から Outlook に遅延バインディングして、未読アイテムがあるかどうかを確認し、ある場合は関連する詳細を取得します。

Const olFolderInbox As Integer = 6

Sub ExtractFirstUnreadEmailDetails()
    Dim oOlAp As Object, oOlns As Object, oOlInb As Object
    Dim oOlItm As Object

    '~~> Outlook Variables for email
    Dim eSender As String, dtRecvd As String, dtSent As String
    Dim sSubj As String, sMsg As String

    '~~> Get Outlook instance
    Set oOlAp = GetObject(, "Outlook.application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)

    '~~> Check if there are any actual unread emails
    If oOlInb.Items.Restrict("[UnRead] = True").Count = 0 Then
        MsgBox "NO Unread Email In Inbox"
        Exit Sub
    End If

    '~~> Store the relevant info in the variables
    For Each oOlItm In oOlInb.Items.Restrict("[UnRead] = True")
        eSender = oOlItm.SenderEmailAddress
        dtRecvd = oOlItm.ReceivedTime
        dtSent = oOlItm.CreationTime
        sSubj = oOlItm.Subject
        sMsg = oOlItm.Body
        Exit For
    Next

    Debug.Print eSender
    Debug.Print dtRecvd
    Debug.Print dtSent
    Debug.Print sSubj
    Debug.Print sMsg
End Sub

これにより、変数に詳細を保存するというリクエストに対応できます。


パート2

次のリクエストに移ります

  1. Outlook 受信トレイの最初のメール (最新のメール) から唯一の添付ファイルをダウンロードします
  2. 添付ファイルを指定されたパスのファイルに保存します (例: "C:...")
  3. 添付ファイルの名前を現在の日付 + 以前のファイル名に変更します

このコード例を参照してください。Excel から Outlook に再度遅延バインディングして、未読アイテムがあるかどうかを確認し、ある場合は添付ファイルがあるかどうかをさらに確認し、ある場合は関連するフォルダーにダウンロードします。

Const olFolderInbox As Integer = 6
'~~> Path for the attachment
Const AttachmentPath As String = "C:\"

Sub DownloadAttachmentFirstUnreadEmail()
    Dim oOlAp As Object, oOlns As Object, oOlInb As Object
    Dim oOlItm As Object, oOlAtch As Object

    '~~> New File Name for the attachment
    Dim NewFileName As String
    NewFileName = AttachmentPath & Format(Date, "DD-MM-YYYY") & "-"

    '~~> Get Outlook instance
    Set oOlAp = GetObject(, "Outlook.application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)

    '~~> Check if there are any actual unread emails
    If oOlInb.Items.Restrict("[UnRead] = True").Count = 0 Then
        MsgBox "NO Unread Email In Inbox"
        Exit Sub
    End If

    '~~> Extract the attachment from the 1st unread email
    For Each oOlItm In oOlInb.Items.Restrict("[UnRead] = True")
        '~~> Check if the email actually has an attachment
        If oOlItm.Attachments.Count <> 0 Then
            For Each oOlAtch In oOlItm.Attachments
                '~~> Download the attachment
                oOlAtch.SaveAsFile NewFileName & oOlAtch.Filename
                Exit For
            Next
        Else
            MsgBox "The First item doesn't have an attachment"
        End If
        Exit For
    Next
 End Sub

パート3

次のリクエストに進みます

  1. メールを「C:...」のようなパスを持つ別のフォルダに保存します。

このコード例を参照してください。これにより、メールがC:\に保存されます。

Const olFolderInbox As Integer = 6
'~~> Path + Filename of the email for saving
Const sEmail As String = "C:\ExportedEmail.msg"

Sub SaveFirstUnreadEmail()
    Dim oOlAp As Object, oOlns As Object, oOlInb As Object
    Dim oOlItm As Object, oOlAtch As Object

    '~~> Get Outlook instance
    Set oOlAp = GetObject(, "Outlook.application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)

    '~~> Check if there are any actual unread emails
    If oOlInb.Items.Restrict("[UnRead] = True").Count = 0 Then
        MsgBox "NO Unread Email In Inbox"
        Exit Sub
    End If

    '~~> Save the 1st unread email
    For Each oOlItm In oOlInb.Items.Restrict("[UnRead] = True")
        oOlItm.SaveAs sEmail, 3
        Exit For
    Next
End Sub

パート4

次のリクエストに進みます

  1. Outlook でメールを「既読」としてマークする

このコード例を参照してください。これにより、電子メールは としてマークされますread

Const olFolderInbox As Integer = 6

Sub MarkAsUnread()
    Dim oOlAp As Object, oOlns As Object, oOlInb As Object
    Dim oOlItm As Object, oOlAtch As Object

    '~~> Get Outlook instance
    Set oOlAp = GetObject(, "Outlook.application")
    Set oOlns = oOlAp.GetNamespace("MAPI")
    Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox)

    '~~> Check if there are any actual unread emails
    If oOlInb.Items.Restrict("[UnRead] = True").Count = 0 Then
        MsgBox "NO Unread Email In Inbox"
        Exit Sub
    End If

    '~~> Mark 1st unread email as read
    For Each oOlItm In oOlInb.Items.Restrict("[UnRead] = True")
        oOlItm.UnRead = False
        DoEvents
        oOlItm.Save
        Exit For
    Next
 End Sub

パート5

次のリクエストに進みます

  1. Excelの添付ファイルをExcelで開く

上記のようにファイル/添付ファイルをダウンロードしたら、以下のコードでそのパスを使用してファイルを開きます。

Sub OpenExcelFile()
    Dim wb As Workbook

    '~~> FilePath is the file that we earlier downloaded
    Set wb = Workbooks.Open(FilePath)
End Sub

私はこの投稿をいくつかのブログ投稿(より詳しい説明付き)に変換しました。これらは、15、16、17のポイントからアクセスできます。vba-エクセル

おすすめ記事