初心者プログラマのハルコム日記

中堅SIerで働くハルコムの日記です。業務で習得した知識を多くの人と共有できたら嬉しいです。趣味で便利ツールを作成したりもしていますので、「こんなのがあったらいいな」ってツールの要望があればコメントください。できるだけお力になれるように頑張ります。

マクロを作成する前に

【Module1】を書き終わって思ったのですが、似たような作業は1つの記事に書いてしまって、都度参照してもらうことにしよう。

そうしないと、1つの記事がダラダラと長くなる。。

 

通化した方がいいと思ったことはこの記事を随時更新してお知らせしたいと思います。

 

1.「Application_NewMailEx」イベントについて

 「Application_NewMailEx」はメールを受信した際に発生するイベント処理です。標準モジュールに記載しても動作せず、「ThisOutlookSession」に記載をする必要があります。

 そして、Outlook研究所さんのソースコードでは、ほとんどのプロシージャが「Private」で指定されています。「Private」を使用すると、他のモジュールのプロシージャからの呼び出しができません。つまり、Outlook研究所さんのソースコードは「全てのコードをThisOutlookSessionに記載する」前提でソースが記載されているものと思っています。(間違っていたらゴメンナサイ。コメントで指摘してください。)

 

 本ブログでは、大量のマクロを標準モジュールのModule1,Module2と命名して紹介します。そのため「Application_NewMailEx」で呼び出しているプロシージャが「Private」で指定されていると、エラーになってしまいます。

そのため、実際にソースコードをコピペして動かす際には、以下のルールを守ってください。

①「Application_NewMailEx」のみ「ThisOutlookSession」に貼り付ける。

②その他のプロシージャは同一標準モジュール内に貼り付ける。

③「Application_NewMailEx」で呼び出しているプロシージャの「Private」を削除する。※

※Privateを削除するならPublicに変更した方がいいんじゃないかとも思っているんですが、とりあえず問題なく動作しているのであまり気にしないことにします。

 

 以下、Module1で紹介するコードを例にしています。

f:id:harucomblog:20180811154312p:plain

f:id:harucomblog:20180811154318p:plain

 

Outlook解説の目次

受信時の処理
  タイトル
Module1 受信したメールの添付ファイルに日付と連番を付けて自動保存するマクロ
Module2 受信したメールを自動的に MSG ファイルとして保存するマクロ
Module3 受信したメールに添付されたメッセージの添付ファイルも含めて自動保存するマクロ
Module4 件名の先頭の [SPAM] を削除するマクロ
Module5 Exchange 環境で受信したメールの差出人を連絡先の表示名に置き換えるマクロ
Module6 一定時間内に同じ件名のメールを複数受信したらメールを送信するマクロ
Module7 受信メールの差出人を連絡先フォルダーのサブフォルダーも含めて検索し、表示名を置き換えるマクロ
Module8 受信したメールから取得したキーワードにより Excel を検索し、情報を追記して転送するマクロ
Module9 送信者が自分以外のメールを受信した際に添付ファイルを自動保存するマクロ
Module10 受信したメールの本文を 1 行ごとに処理するマクロ
Module11 メッセージ受信時に游ゴシックを別のフォントに置き換えるマクロ
Module12 特定の条件のメールを受信した際に、本文に記載された IP アドレスへ ping するマクロ
Module13 決まった件名で終わるメッセージを受信したら、キーワードを含む 1 行を CSV ファイルに保存するマクロ
Module14 受信メールの宛先やCcをアドレス帳の名前に置き換えるマクロ 
Module15 メール本文に含まれる名前で連絡先を検索してメールを移動するマクロ 
Module16 Outlook.com のメールを Outlook で受信した場合のみ文字化けするメールを修正するマクロ 
Module17 HTML 形式のメールの本文中に含まれる表を Excel にコピーするマクロ 
Module18 受信したメールの添付メッセージに含まれる添付ファイルも保存・印刷するマクロ 
Module19 決まった件名のメッセージを受信したら、データを CSV ファイルに保存するマクロ-複数対応版 
Module20 特定条件の受信メールの差出人を連絡先に追加するマクロ 
Module21 削除通知のメールをもとに予定を削除するマクロ 
Module22 受信したメールの件名の文字列により異なるフォルダーへ自動的に添付ファイルを保存するマクロ 
Module23 受信したメールを振り分け前にアカウントごとのフォルダーに保存するマクロ
Module24 受信したメールの添付ファイルを印刷し、メールを移動するマクロ 
Module25 メッセージを受信したら自動返信し、メール本文と添付ファイルを印刷するマクロ IMAP4 対応版 
Module26 メッセージを受信したら自動返信し、メール本文と添付ファイルを印刷するマクロ 
Module27 件名にキーワードを含むメールを受信した際に分類項目と連番を付与するマクロ 
Module28 メッセージの受信を通知するマクロ 
Module29 受信したメールをもとに予定表アイテムを作成するマクロ 
Module30 受信したメッセージを再送信するマクロ 
Module31 Excel ファイルのキーワードをもとに転送するマクロ 
Module32 LDAP サーバーから差出人の表示名を取得して置き換えるマクロ 
Module33 メッセージの受信時に連番を件名に付与するマクロ 
Module34 本文に特定の文面を含む場合に、そのメールとファイルを添付して転送するマクロ 
Module35 特定の文字列を件名や本文に含むメールを受信した際に予定を作成するマクロ 
Module36 添付された Excel ファイルの特定のセルの値でフォルダーに振り分けるマクロ 
Module37 受信したメールを振り分け前に保存するマクロ 
Module38 特定の件名を含むメールを受信した際に、差出人ごとのフォルダに添付ファイルを上書き保存するマクロ 
Module39 メールを受信するたびにメモに変換して保存するマクロ
Module40 Outlook 2003 で受信時に分類項目を消去するマクロ
Module41 メッセージの差出人を連絡先の表示名に置き換え、さらに連絡先ごとのフォルダに振り分けるマクロ 
Module42 メッセージを連絡先ごとのフォルダに振り分けるマクロ
Module43 添付された Excel ファイルの内容を受信の際に本文に追記するマクロ 
Module44 受信したアカウントごとのフォルダに添付ファイルを保存するマクロ
Module45 件名、本文、差出人が空白のメールを受信時に削除するマクロ
Module46 決まった件名のメッセージを受信したら、データを CSV ファイルに保存するマクロ
Module47 Outlook 2002 以前で新着メッセージを処理するマクロを記述する
Module48 受信したメールの差出人を連絡先から検索する
Module49 受信したメールの添付ファイルを自動保存するマクロ

【Module1】受信したメールの添付ファイルに日付と連番を付けて自動保存するマクロ

Outlook研究所さんの記事の解説です。

1日1記事を目標にするとは言ったものの、平日も飲み会だったり、開発する環境が整ってなかったりで、なかなか上手くいかないものですね。

言い訳はこの辺で終わらせて、解説に移ります。

 

第1回目のタイトルは

【受信したメールの添付ファイルに日付と連番を付けて自動保存するマクロ】

です。

 

普段の業務でファイルのやり取りが多い人は使ってみるとかなり有効なマクロだと思います。

本来、セキュリティを考慮すると、むやみにファイルを添付してメールを送付するのはお勧めできないのですが、そんなことも言ってられない人も沢山いらっしゃるのが現実です。

※現在、セキュリティチームで働いているので、そのうち「どのような危険が潜んでいるか」「どのようにメール業務を脱却するか」なども記事にしたいです。

 

それでは本題に入ります。

ソースコードOutlook研究所さんの記事から参照してください。

受信したメールの添付ファイルに日付と連番を付けて自動保存するマクロoutlooklab.wordpress.com

 

また、マクロを作成する前に - 初心者プログラマのハルコム日記で紹介した内容に従って、ソースコードを貼り付けてください。

 

ここで、追加で1点修正が必要です。

 「SaveAttachmentsWithDate」内のSAVE_PATHで添付ファイルの保存先フォルダを指定していますので、任意のフォルダパスに指定してください。

 ただし、注意が必要です。よく見ると

 strFileName = SAVE_PATH & strDate & Format(iSerial, "0#_") & .FileName

 となっています。

 「フォルダパス+日付+連番+ファイル名」で保存先とファイル名を指定していますが、SAVE_PATH & strDateとなっています。

 この場合SAVE_PATHの最後に¥を指定してあげないと、フルパスが成り立ちません。

 ここだけ注意すればOKです。

f:id:harucomblog:20180811003823p:plain

 

まずは「Application_NewMailEx」の適当な場所でブレークポイントを置いてみてください。

テストとして、ファイルを添付したメールを自分自身に送付してみます。

f:id:harucomblog:20180811003811p:plain

 

メール受信後、「Application_NewMailEx」のブレークポイントで止まっていると思いますので検証していきましょう。

f:id:harucomblog:20180811003756p:plain

 

メッセージオブジェクトがあれば「SaveAttachmentsWithDate」を呼び出すと書いているように見えます。

これだと、絶対に「SaveAttachmentsWithDate」が呼ばれちゃうのでIf分必要なのかな?と思っちゃいました。教えて、偉い人!(解説するとか言いながらお恥ずかしい)

 

「SaveAttachmentsWithDate」ではFor Each objAttach In objMsg.Attachmentsで

添付ファイルの数だけファイルを保存する処理を行っています。

この中で、日ごとの連番を取得する処理(GetSerialForToday)がクセがあるかもしれませんね。

f:id:harucomblog:20180811003803p:plain

 

ただ、解説を書こうと思ったら、丁寧に細かくコメントされていて、出しようがありません。笑

f:id:harucomblog:20180811003806p:plain

 

処理が完了すると、指定したフォルダの中に添付のファイルが保存されていることが確認できました。

f:id:harucomblog:20180811020619p:plain

 

ここからさらに、受信したメールを自分自信に再送します。

f:id:harucomblog:20180811003816p:plain

 

すると連番が増えていることがわかりますね。

f:id:harucomblog:20180811020622p:plain

 

今日はここまでとします。

めっちゃ疲れて、最後の方が雑になっちゃいました。。

なかなか大変な作業ですね。

 

まだ1記事目、めげずに頑張ります。

 

これ違うだろ、この辺わからんからまじめに解説しろなどのコメントを頂ければ誠心誠意対応します。

 

お休みなさい。

 

byハル。

Outlook研究所さんの解説を始めます

まずは、得意分野の記事を書いていきたいと思います。

本来はExcelVBAが得意で、職場ではお客様の業務効率化を図ったりしています。

なので、ExcelVBAの記事を書くのが楽なんですが、他の方が沢山記事を書かれていてネタが出尽くしてしまっていますよね。笑

 

そこで、OutlookVBAなるものに手を出してみたいと思います。

メールの単純作業を効率化しちゃおうって話ですね。

 

しかしOutlookVBAについては全くの素人なもので、ちょっとずつ勉強してこのブログで成果を共有していきたいです。

 

早速、OutlookVBAについて調べていると、Outlook研究所なるサイトにたどり着きました。

Outlook 研究所 | Outlook を徹底活用する方法を研究するサイトです。

  

これがもう、これ以上やることないんじゃないかってくらいに沢山の機能を紹介してくれているんですね。

「じゃあ、お前必要ないじゃん」って声は一旦置いてください。笑 

実際に記事を読み進めると、要件と実現するためのコードは書いてあるものの、なかなか自分のやりたいことに当てはめるのが難しかったりします。

 

そこで、本ブログではVBA初心者にでも理解できるように詳しく解説したいと思います。

できれば1日1記事を目標に書きますが、気合入れすぎても仕方ないと思うので気ままに書いていきます。

 

もし、Outlook研究所さんの紹介している機能で優先して解説してほしい記事があればコメントください。

そのほか、ExcelVBAについてもお困りのことがありましたらご相談ください。

趣味の範囲でお力になれることがあれば、お手伝いします。