Excel の VBA を使用して、Outlook メールの Excel スプレッドシートの添付ファイルをダウンロードして開こうとしています。どうすればよいでしょうか。
- ダウンロードOutlook の受信トレイにある最初のメール (最新のメール) の唯一の添付ファイル
- 保存指定されたパスのファイル内の添付ファイル(例:「C:...」)
- 添付ファイルの名前を次のように変更します。現在の日付+以前のファイル名
- メールを「C:...」のようなパスを持つ別のフォルダに保存します。
- Outlook でメールを「既読」としてマークする
- 開ける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
- Outlookへの接続の作成
- 未読メールがあるか確認する
Sender email Address
、、、、などDate received
の詳細を取得していますDate Sent
Subject
The 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
次のリクエストに移ります
- Outlook 受信トレイの最初のメール (最新のメール) から唯一の添付ファイルをダウンロードします
- 添付ファイルを指定されたパスのファイルに保存します (例: "C:...")
- 添付ファイルの名前を現在の日付 + 以前のファイル名に変更します
このコード例を参照してください。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
次のリクエストに進みます
- メールを「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
次のリクエストに進みます
- 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
次のリクエストに進みます
- 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-エクセル