・メール作成時のエラー 必要なデータが適切でない等
・メール送信時のエラー インターネットに接続されていない等
後者については、これまでのVBAプログラミングで、だいぶ改善しました。
でも前者については、まだ未対応な部分があります。
とりあえずメール作成時のエラーを防ぐために、ワークシートの氏名とメールアドレスの有無をチェックしてはいます。
これだけでもメール作成時のエラーは、だいぶ減らすことができます。でも十分ではありません。
メール作成に失敗すると、メールキュー(Sendフォルダ)の中に、メールファイルが残るので、同じ内容のメールを二重に送信する原因となります。
例えば、行番号の選択範囲が「3~5」で、4行目でメール作成時のエラーが発生した場合を考えてみましょう。
そのままではエラーが発生しないので、今回はわざとエラーを出してみます。
【1】VBEで、以下の部分をコメントにします。

これでデータをチェックしなくなります。
【2】次はワークシート「送信」の4行目のメールアドレスを削除します。
【3】送信フォームを表示して、行番号「3~5」を指定し、メールを一括送信してください。件名や本文は、適当でかまいません。
【4】メールアドレスが無いので、メール作成エラーになります。

3行目は正しく作成されるのですが、4行目でエラーが出るので、そこでプログラムがストップします。
【5】確認したら、フォームを閉じてください。
【6】続けて、Sendフォルダの中に、メールファイルが残っているのを確認してください。

4行目と5行目のメールは作成されずに、3行目のメールが残ったままです。これが二重送信の原因になります。
errフォルダに移動するのは、送信時エラーの場合だけです。メール作成時には移動しません。
【7】確認したら、残っているメールファイルを、手動で削除します。
メールは手動で削除することも可能ですが、面倒だし、忘れるかもしれないので、プログラムで自動化しましょう。
【8】再びVBEを開き、以下の図の部分を追加します。

・変更部分のみ掲載
'送信用フォルダをクリアする
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"
これもワイルドカード文字を使用できます。
つまり、メールキューにあるテキストファイルを、全て削除するという処理です。