メール送信時に、複数の添付ファイルを指定できるプログラムの解説。

Excelからメール送信する時に、複数の添付ファイルを指定できるようにするVBAプログラムは、意外と簡単にできます。

追加するプログラムは、たった1行だけなので、簡単なのですが、その仕組みを説明するのは、ちょっと複雑です。

まず、変数 files には、ワークシート「送信」のF列の値が代入されています。

files = Trim(Range("F" & i).Value)

* i はカウントアップします。

この変数 files には、添付ファイルがある場合は、フルパスの文字列が代入されます。無い場合は、空の文字列「""」が代入されます。

したがって変数 files には、以下のような文字列が代入されることになります。

C:\mailPG\Files\test1.txt;C:\mailPG\Files\test2.txt

*「\」はWindowsでは円記号のことです。

もし添付ファイルが複数ある場合は、ワークシートのF列で、「;」(セミコロン)で区切って指定したはずです。

「;」のような文字を、「区切り文字」といいます。区切り文字は、デリミター(delimiter)ということもあります。

例えば、よく見かけるCSVファイルでは、「,」(カンマ)が区切り文字に使われています。

でもプログラム内では、カンマは意味がある文字です。関数の引数を指定する時に使われることがあります。

文字列なので、カンマを使うこともできるのですが、紛らわしいので、今回はセミコロンにしました。

実は、区切り文字は何でもかまいません。ワークシート側とVBAプログラム側で文字を一致させればOKです。また1文字以上なら、何文字でも大丈夫です。

今回追加したプログラムは、以下の一行です。

files = Replace(files, ";", vbTab)

*vbTabは、タブ文字を表すVBAの定数

このプログラムは、Replace関数で、区切り文字をタブ文字に置換しているだけです。そして変数 files に再び代入している点がポイントです。

置換すると変数 files には、以下のような文字列が、代入されることになります。

C:\mailPG\Files\test1.txt   C:\mailPG\Files\test2.txt


区切り文字の部分が、タブ文字(半角スペース3つ分)に置換されていることがわかります。

何故タブ文字に置換するのかというと、BASP21 のSendMailメソッドの最後の引数は、添付ファイルをタブで区切って、複数指定できるようになっているからです。

・filesの部分に注目

msg = bobj.SendMail(mailq, mailto, mailfrom, tmpSubj, tmpBody, files)


もし置換を使わずに、VBA内に直接記述するなら、基本的な書き方は、以下のようになります。(F列も参照せずに直接書く場合)


files = "C:\mailPG\Files\test1.txt" & vbTab & "C:\mailPG\Files\test2.txt"


しかしこれでは、添付ファイル数が増えると、自動的に対応できません。プログラムの修正が必要です。

そこでワークシートを参照し、置換を使い、複数の添付ファイルに対応できるようにしたのが、今回のプログラムだというわけです。


【ワンポイント】
ちなみに以前に紹介した、G列、H列と増やす方法だと、以下のようにプログラムを書けば可能です。

mail-274.gif


files = Trim(Range("F" & i).Value) & vbTab & Trim(Range("G" & i).Value) & vbTab & Trim(Range("H" & i).Value)


このように書いても同じです。

files = Trim(Range("F" & i).Value) & vbTab
files = files & Trim(Range("G" & i).Value) & vbTab
files = files & Trim(Range("H" & i).Value)

変数内の文字列を、どんどんつなげていく書き方は、こんな感じになります。

添付ファイルの最大数が決まっている場合だと、これでもいいかもしれません。ワークシート上では、見やすいというメリットがあります。

ただ、この方法だと、列数が増えた場合に、自動的に対応できません。プログラムの修正が必要になります。

やはり前述のような、区切り文字と置換を使ったVBAプログラムがお薦めです。そのほうがプログラムもシンプルです。

スポンサードリンク

スポンサードリンク






メール送信・受信プログラミング初心者入門 TOPへ