エラー処理は On Error を使えば解決、というものではない。入力項目に対しての項目チェック、データベースの更新時のエラーの処理など、考えておかなければならない。

エラーチェックの契機はイベントの発生である。主に次の3つだろう。
1-1.ユーザーがイベントを明示的に実行した際行うもの:ボタンを押下するケースなど
1-2.ユーザーがイベントを意識していないが、アプリケーションがハンドリングするもの;入力値によって他のリストボックスを更新する、ケースなど
1-3.時間の周期で自動実行するもの:Webから定期的にデータを取得するケースなど

エラーチェックが行われる際の表示画面は
・フォーム
・シート
で、表示をしていないケースはあまりないだろう。

それぞれにおいて、エラーの表示のさせ方を決めておく必要がある。例えば次のようなことを決める必要がある。<表示方法>
・フォームなら、エラーはメッセージボックスにひとつだけ出す。
・シートで単票形式なら、メッセージボックスにひとつだけ出す。/エラーフォームに一覧を表示する。
・シートで表形式なら、シートのエラー欄or別のシートに一覧を出す。
<色>
・エラー箇所のコントロールやセルに色を塗る/塗らない。
<ログ>
・エラーログを出す/出さない。

そうこう考えると、アプリケーション全体でメッセージの出し方の方針や用語を揃えたくなる。

今まで使ってきて使い勝手がいいのが、エラーを蓄積する用意をし、処理開始時にエラー内容を初期化してからエラーを蓄積する方法だ。フォームや単票と表形式ではエラーの内容の蓄積内容が違うのだが、共通のエリアに(空き項目が出るが)溜めて差し支えないだろう。そうすれば取り出して表示する際、どの表示形式でも同じエリアからの取り出すようにすればややこしくない。
ただ、一つしかエラーを出さないにもかかわらず、すべてのエラーをチェックする、というのも時間の無駄かもしれない。特にデータベースアクセスを伴う場合は止めた方がいいだろう。

エラーに関してざっと書いた。共通モジュールとして雛形があり、それをカスタマイズして使う方法になるだろう。

ちょっと抽象的になったが・・。




顧客企業への商品紹介などの用途なのだが、文面の宛名名称を変えてメールを大量に送りたいものがでてきた。
メールを送付した証拠を残す必要があったり、メールの送信がうまくいったかの確認が取りたいのでメーラーソフトにデータを渡してやろう、と考えていたが、サンプルを作って広く使っていただくためには汎用性が必要である。そう考えるとExcelからメールを送付した方が楽である。で、送信アドレスとRepryアドレスを別にしておくと、返事はRepryに、エラーは送信アドレスに戻る。この方法でいこう。

VBAでのメール送信はしたことがないので調べてみると、ExcelではVBAで「ブックを添付して」というのは可能らしい。が、BASP21を利用すれば結構簡単に作れるようだ。
さて、何をつかおうか?

ネットワーク系を扱うときによく参照する書籍を確認

VBAによるTCP/IPプログラミング入門―HTTP,SMTP,POP3,FTPの基本がわかる (TCP・IP基礎シリーズ)/志村 康人
¥2,520
Amazon.co.jp
SMTPやPOP3をサポートしている。
私の環境では
・Outbound Port25 Blocking対策が可能か (Port 578の利用可能か)
・POP After SMTP 対応が可能か
である。

よくよく検討してみることにする。


---------------------------
POP After SMTP はメーラーでどちらを先にするかの切り替えだけだろう。これはどちらでもクリアできるはず。
ざっと書籍を見た限り、Outbound Port25 Blocking対策が可能である。
BASP21はというと、WSOK32.DLLを呼んでいる・・。上記ではMSWINSOCK.OCX・・。まあ内容は似たようなもんだろう。ラッピングしている分だけBASP21の方が高機能のようだ。

ブログに散見していたものでは現場では使いにくいので、ダイジェスト版としてVBAコーディング標準の作成に着手しました。
現状、表紙を入れ、目次なしで6ページです。道のりは遠いですが、千里の道も一歩から。とりあえず形だけでも作成し、各方面から意見を頂こうか、などと考えています。

http://www.vba-manners.info/ のダウンロード にpdfで用意しています。ご意見等有りましたらHP内のメールアドレス宛にご指導ご鞭撻、ご意見ご苦情等頂ければと存じます。