スポンサードリンク

メール作成時エラーの場合、残ったメールファイルを削除する方法について。

Excelからメール送信する時に、考えられるエラーとしては、主に2つあります。

・メール作成時のエラー 必要なデータが適切でない等
・メール送信時のエラー インターネットに接続されていない等

後者については、これまでのVBAプログラミングで、だいぶ改善しました。

でも前者については、まだ未対応な部分があります。

とりあえずメール作成時のエラーを防ぐために、ワークシートの氏名とメールアドレスの有無をチェックしてはいます。

これだけでもメール作成時のエラーは、だいぶ減らすことができます。でも十分ではありません。

メール作成に失敗すると、メールキュー(Sendフォルダ)の中に、メールファイルが残るので、同じ内容のメールを二重に送信する原因となります。

例えば、行番号の選択範囲が「3〜5」で、4行目でメール作成時のエラーが発生した場合を考えてみましょう。

そのままではエラーが発生しないので、今回はわざとエラーを出してみます。

【1】VBEで、以下の部分をコメントにします。

mail-232.gif

これでデータをチェックしなくなります。


【2】次はワークシート「送信」の4行目のメールアドレスを削除します。


【3】送信フォームを表示して、行番号「3〜5」を指定し、メールを一括送信してください。件名や本文は、適当でかまいません。


【4】メールアドレスが無いので、メール作成エラーになります。

mail-230.gif

3行目は正しく作成されるのですが、4行目でエラーが出るので、そこでプログラムがストップします。


【5】確認したら、フォームを閉じてください。


【6】続けて、Sendフォルダの中に、メールファイルが残っているのを確認してください。

mail-233.gif

4行目と5行目のメールは作成されずに、3行目のメールが残ったままです。これが二重送信の原因になります。

errフォルダに移動するのは、送信時エラーの場合だけです。メール作成時には移動しません。


【7】確認したら、残っているメールファイルを、手動で削除します。


メールは手動で削除することも可能ですが、面倒だし、忘れるかもしれないので、プログラムで自動化しましょう。


【8】再びVBEを開き、以下の図の部分を追加します。

mail-238.gif

・変更部分のみ掲載

'送信用フォルダをクリアする
If Dir(mailq & "\*.txt") <> "" Then
  Kill mailq & "\*.txt"
End If


プログラムの追加は、たったこれだけです。


【9】プログラムを変更したら、VBEを保存してください。


あとは、【1】〜【6】の手順で、同じように動作確認します。今度はメールファイルが残らないはずです。

手順【4】で、メッセージボックスが表示されたままの状態で、Sendフォルダの中を確認すると、まだメールファイルが残っています。

そしてメッセージボックスの「OK」ボタンをクリックし、再度Sendフォルダの中を確認すると、メールファイルが自動的に削除されていることが、よくわかります。


*動作確認が済んだら、元に戻すのを、忘れないように注意してください。
・【1】でコメントにした部分を元に戻して、保存してください。
・ワークシート「送信」の4行目のメールアドレスを元に戻してください。


【解説】
変数 mailq には、Sendフォルダの場所が代入されています。

Dir(mailq & "\*.txt")

Dir 関数は、引数と一致するファイル名やフォルダ名を返します。ファイルが存在するか調べる時に便利です。

Dir 関数は、ファイルが存在する場合は、ファイル名を返します。逆に存在しない場合は、長さ0の文字列「""」を返します。

複数のファイルを指定したい場合は、「*」(アスタリスク)や「?」(疑問符)などのワイルドカード文字を使用できます。

「*」を付けると、どんなファイル名も該当します。

また <> "" の部分は、「長さ0の文字列ではない」ということなので、結局は「テキストファイルがある」という意味になります。

まとめると、以下の意味は、
If Dir(mailq & "\*.txt") <> "" Then

「もし、メールキュー(Sendフォルダ)に、テキストファイルが存在している場合」ということです。

そして Kill ステートメントで、テキストファイルを削除します。
Kill mailq & "\*.txt"

これもワイルドカード文字を使用できます。

つまり、メールキューにあるテキストファイルを、全て削除するという処理です。

スポンサードリンク






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