エクセル勉強会 上級者① エクセルVBAでメール送信(OutLookの操作) の逆を考えてみます。

実行したい事

ボタンをクリックしたら、

1、本日受信したメールで、件名が L3(本日の売上)に添付のファイルを自動作成

  ※ただし、メールに OutLook を使用している方限定です。

別のボタンをクリックしたら

2、保存されているファイルで ファイル名が C3(売上報告)のファイルを開いて

  データリストの最終行の下に追加する。

 

①の手順

1、抽出データにボタンを配置、マクロの登録=>新規作成 でVBエディターを起動

Set objAPP = CreateObject("Outlook.Application")
Set myNaSp = objAPP.GetNamespace("MAPI")
Set myFolder = myNaSp.GetDefaultFolder(6)
For olIndex = myFolder.Items.Count To 1 Step -1
Set myItem = myFolder.Items(olIndex)
If myItem.ReceivedTime < Date Then MsgBox "本日受信メール終了": Exit Sub
If myItem.Subject = Range("L3").Value Then
MsgBox "該当メールがありました"
For Each objAttach In myItem.Attachments
objAttach.SaveAsFile ThisWorkbook.Path & "\" & objAttach.Filename
MsgBox "ファイルを保存しまた。 " & strFileName
Next
End If
Next
2、ボタンをクリックして、同じフォルダーに売上報告.xlsxが出来ていれば、開いてみる。
 
今度は、ちょっと長いです。
※Msgboxは、動作を分かりやすくするためですので、削除していただいても構いません。
Set objAPP = CreateObject("Outlook.Application")
Set myNaSp = objAPP.GetNamespace("MAPI")
Set myFolder = myNaSp.GetDefaultFolder(6)
は、言葉で説明するのも難しい、取りあえず GetDefaultFolder(6) は、受信フォルダの事
myFolder と云う変数に 受信フォルダの情報を全て入れてしまう。
For olIndex = myFolder.Items.Count To 1 Step -1
受信フォルダの一番新しいメール(myFolder.Items.Count )から順に古い方へ繰り返す。
If myItem.ReceivedTime < Date Then
もし、ファイルの受信日時が今日以降になったら終了
※本来は、このVBAを実行した日時を、空いているセルに入れて
  その日時と比較すれば漏れなく実行されます。
 
If myItem.Subject = Range("L3").Value Then
メールの件名が L3と同じだったら、以下実行
For Each objAttach In myItem.Attachments
objAttach.SaveAsFile ThisWorkbook.Path & "\" & objAttach.Filename
Next
添付ファイルが複数あっても全て保存します。
 

②の手順

1、抽出データにボタンを配置、マクロの登録=>新規作成 でVBエディターを起動

GYOU = Sheets("データリスト").Range("A" & Rows.Count).End(xlUp).Row + 1
Workbooks.Open Filename:=ThisWorkbook.Path & "\" & ThisWorkbook.Sheets("抽出データ").Range("C3").Value & ".xlsx"
ThisWorkbook.Sheets("データリスト").Range("A" & GYOU & ":F" & GYOU + 1000).Value = Range("A2:F1002").Value
ActiveWorkbook.Close SaveChanges:=False
Kill ThisWorkbook.Path & "\" & Range("C3").Value & ".xlsx"

2、ボタンをクリックして、C3の名前のファイルのデータが、データリストに追加されていればOK

実は、このコードはちょっと手抜きです。

例えば、複数に支店などから、異なる添付ファイルにファイル名で複数受信されている場合も

あります。今回は、C3セルで指定したファイル名のみしか対応していません。

 

改善方法

PC上(どこでも構いません)に、新しくフォルダを作成、このファイルを保存します。

保存する時は、マクロ有効ブック(.xlsm)形式で

他にファイルがない状態(これで他のファイルと区別します)

実行したい事

1のボタンで、添付のファイルが複数保存される(ファイル名は異なるものとする)

2のボタンを押すと、同じフォルダ内のエクセルファイル(.xlsx)を全て開いて

 データの追加を行う。

こちらのコードは、後ほど紹介します。

 

上級者として理解してほしい事

1、VBAは、Office製品(エクセル以外のソフトも)操作できる。

2、OutLookを操作することで、遠隔地で作成されてデータを一つにまとめる(一元化)が出来る。

3、メールの送信を自動化すると、件名など統一できる。

  手動操作の場合、メールの構成が異なる事例が出てきてしまう、

  ※もちろん、ミスもあれば手間もかかります。