エクセル勉強会 上級者① エクセルVBAでメール送信(OutLookの操作) の逆を考えてみます。
実行したい事
ボタンをクリックしたら、
1、本日受信したメールで、件名が L3(本日の売上)に添付のファイルを自動作成
※ただし、メールに OutLook を使用している方限定です。
別のボタンをクリックしたら
2、保存されているファイルで ファイル名が C3(売上報告)のファイルを開いて
データリストの最終行の下に追加する。
①の手順
1、抽出データにボタンを配置、マクロの登録=>新規作成 でVBエディターを起動
Set myNaSp = objAPP.GetNamespace("MAPI")
Set myFolder = myNaSp.GetDefaultFolder(6)
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
Next
Set myNaSp = objAPP.GetNamespace("MAPI")
Set myFolder = myNaSp.GetDefaultFolder(6)
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、メールの送信を自動化すると、件名など統一できる。
手動操作の場合、メールの構成が異なる事例が出てきてしまう、
※もちろん、ミスもあれば手間もかかります。