スポンサードリンク

ステップメールで、送信間隔を設定するプログラムのヒント。

今回は、Excelからステップメールを送信するVBAプログラムの「課題4」のヒントを掲載します。

ステップメールを改良して、送信間隔を設定できるプログラムを作成します。

課題4の内容や動作確認の方法は、「Step60・課題4 送信間隔を設定する」をご覧ください。

課題の説明だけで、プログラミングできることが理想的です。

でもプログラミング初心者には、まだまだ難しい部分もあると思います。

そこでいくつかヒントを出しておきます。

以下のヒントを見ただけで、プログラミングができたら、とりあえず課題は合格です。

(1)新しい変数名
送信間隔 intervalArray() Integer型の配列

どこで変数を宣言したほうがよいのか、考えてください。

ヒントは変数の有効範囲です。

そのプロシージャ内だけで使う場合と、複数のプロシージャで共通して使う場合は、宣言する場所が異なります。

また配列の変数は、どのように宣言するのか、復習も兼ねています。

ステップメールのタイトルや文章を代入した配列を思い出してください。要領は同じです。


(2)メールの送信間隔を取得する配列の要素数を変更します。


ReDim intervalArray(1 To maxStep)


配列は1から始まり、最大ステップ数までになっているのがポイントです。

理由は、配列とステップの番号を揃えるためです。

このプログラムをどこに書けばいいのか、考えてみてください。


(3)メールの送信間隔は、配列を使って、Excelのワークシートから、あらかじめ取得しておきます。


intervalArray(i) = CInt(Trim(Sheets("文章").Range("D" & i + 1).Value))


このプログラムをどこに書けばいいのか、考えてみてください。

ヒントは、繰り返しの制御文の中です。

タイトルや文章の場合を思い出してください。要領は同じです。


(4)メールの最終送信日を取得し、次の送信日を計算します。


'最終送信日
lastDate = CDate(Trim(Range("D" & i).Value))
'次の送信日を計算
nextDate = lastDate + intervalArray(nextStep)


CDate()は、引数を日付型に変換するVBAの関数です。

日付の計算をするためには、データ型を揃える必要があるからです。


(5)次の送信日がまだの場合は、メールを作成しないようにします。


'送信日がまだの場合
If nextDate > Now Then
  Exit For
End If


Nowは現在の日時を返します。

次の送信日が現在の日時より大きい場合は、まだメールを送るタイミングではありません。

そこで「Exit For」でFor文を1回抜け出し、次の回へ進みます。

つまり次のメールへ進むということです。

これをどこに組み込めばよいのか、考えてみてください。


(6)メール送信に成功したら、ワークシート「送信」のステップと最終送信日を更新します。

前回に「updateStep」というSubプロシージャを作りましたが、それを改良します。

ただし今回は、ステップと最終送信日を同時に更新するため、Subプロシージャ名が適切ではなくなります。

そのため「updateData」に変更しましょう。

updateStep → updateData


Private Sub updateData()
省略
End Sub


このSubプロシージャの中身を考えて、完成させてください。

ヒントは、最大ステップを超える場合、かつ送信日が未だの場合は、データを更新しないことです。

なぜなら、送信したメールのデータだけを更新しないと、矛盾するからです。

考え方はメールを作成する場合と同じです。(プログラムも同じ)


(7)ステップと最終送信日の更新は、次のように行ないます。


'ステップアップ
Range("C" & i).Value = nextStep
'最終送信日を更新
Range("D" & i).Value = Format(Now, "yyyy/mm/dd")


Nowは時刻まで含んでいるので、Format関数で書式を整えています。

このプログラムを updateData プロシージャの中に組み込んでください。


(8)上記のSubプロシージャを呼び出して使う時には、以下のようにします。


updateData


またはCall命令を使って、以下のように書いても同じ結果になります。

Call updateData


これをどこで呼び出したらよいのか、考えてください。

updateStep → updateData

ヒントは、メールの送信が上手くいった場合にだけ、呼び出すということです。


以上のヒントを参考にして、課題プログラムの作成に挑戦してみてください。

ヒントと言っても、ほとんど答えを書いているようなものですね。

どうですか?

送信間隔を指定できるステップメールは、上手くプログラミングできたでしょうか?


スポンサードリンク






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