追加するプログラムは、たった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列と増やす方法だと、以下のようにプログラムを書けば可能です。
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プログラムがお薦めです。そのほうがプログラムもシンプルです。