VBA

【VBAでOutlook操作】添付ファイルの有無を判定して下書きメールを作成する

VBAでOutlook操作・下書きメールにファイルを添付する方法を紹介しています!

 

前回の記事では、「指定のキーワードに合致したファイル」を、下書きメールに添付するマクロを紹介しました。

【VBAでOutlook操作】複数ファイルを添付できる!下書きメールを一括作成するマクロExcelシートのデータを元に、Outlookの下書きメールを一括作成するマクロです。キーワードに一致する複数ファイルをまとめて添付できるのがポイントです ...

指定のキーワードに合致するファイルが存在するか否かに関わらず、Excelシートに存在するデータの件数分、下書きアイテムを作成するマクロでした。

outlook-keyword1

 

もり
もり
この記事で紹介するのは、「添付ファイルが存在しない場合はメールを作らないマクロ」だよ

Excelシートのデータを元に、

  • 下書きメールを作成する
  • 指定のキーワードに一致するファイルを添付する(複数ファイルを添付可能)

※ただし、キーワードに一致するファイルが存在しない場合は、下書きメール自体を作成しない

具体例をみてみましょう。

メールの元ネタになるExcelシートに、5件のデータがあります。F列に指定したキーワードに一致するファイルを下書きメールに添付します。

outlook-keyword2

ファイルを格納しているフォルダの中身には、佐藤・高橋・田中の3人分のファイルしか存在しません。このような場合に、鈴木・伊藤さん宛ての下書きメールは作成しません。

つまり、「キーワードに一致するファイルが見つからない場合は、下書きメールを作成しない」がこの記事のお題です。

outlook-keyword3

↓マクロ実行結果

outlook-keyword4

このように、添付ファイルが存在する場合のみ、下書きメールを作成します。

※以降の説明は、前回記事のコードを元にしています。

添付ファイルが存在するか否かの判定をする

SubプロシージャFileAttachでファイルを検索して添付するから、このプロシージャの中で判定すればいいのかな?
もり
もり
そうだね!1つでもファイルを添付したらTrueを返す(0ならFalseを返す)という処理を加えてみよう
添付したファイル数をカウントして、プロシージャの最後でファイル数をチェックして、True/Falseを返せば良さそうだね
あれ?Subプロシージャって値を返せるんだっけ?
もり
もり
おっ、よく気づいたね~!
Subプロシージャは値を返さないから、FileAttachをFunctionプロシージャに変更するよ!

変数fileCntを用意して、添付したファイル数をカウントし、その数値によって返り値を決めます。

  • 1以上の場合 = True
  • それ以外(=0) = False

Boolean型の初期値はFalseなので、返り値を指定しなければFalseが返ります。この性質を利用して、fileCntが1以上の場合のみ、返り値Trueを指定します。

以下コードのコメントで★をつけた行がポイントです

添付ファイルが存在する場合のみメールアイテムを作成する

続いてメイン処理です

もり
もり
ポイントは31行目!FileAttachの返り値をチェックするよ

If文を使用して、FunctionプロシージャFileAttachの返り値がTrueの場合のみ、下書きメールを作成します。

FileAttachの返り値がFalse(添付ファイルがゼロ)の場合、メールアイテムを作成しません。

へぇ~これで添付ファイルがある場合だけ、メールを作るんだね

コードまとめ

FunctionプロシージャCreateMailBodyは前回記事から変更なしです。

 

ポイントまとめ

ループ処理を何回通過したか?をチェックするには、カウント変数を用意すると便利です。

  1. カウント変数を用意する(ループの前で宣言)
  2. ループを通過するたびにカウントを+1する
  3. プロシージャの最後に、カウント変数の値をチェックする

→カウント変数の値に応じて、返り値を決める

ポイントはFunctionプロシージャだね
もり
もり
そうだね!Functionプロシージャってなに?って人向けに、この記事で詳しく解説してるよ~
【ExcelVBA】Functionプロシージャとは(やさしい図解付き)引数とは?値を渡す?結果を返す? VBA入門者が苦戦するFunctionプロシージャを徹底解説しています!...
非エンジニアもプログラミングを学習する時代!

「プログラミング」ってエンジニアとかプログラマーの人がするものでしょ?文系の私には関係ないや~って思っていませんか?

いまは、非エンジニアもプログラミングを学習する時代です!

「プログラミングの必修化」をご存知ですか?

  • 2020年~ 小学校で開始
  • 2021年~ 中学校で開始
  • 2022年~ 高等学校で開始
  • 2024年~ 高校受験科目に新設

学校での必修化に向けて、すでに子ども向けプログラミングスクールが多数開校されています。

あと数年もすれば、あたりまえにプログラミングができる新入社員がやってくる時代になります。

プログラミングってなに?どんなもの?まずは無料体験から試してみませんか?

 

1週間の無料体験あり!
オンラインスクール実績No.1!