でも正規表現を使って、メールアドレスが正しいか、メール送信前にプログラムでチェックすることは可能です。
この場合の「正しい」とは、メールアドレスとして、適切な値かどうかということです。メールが届くかどうかではないので、ご注意ください。
実は BASP21 には、Perl5互換のパターンマッチ処理を行なう「Match」というメソッド(命令)が、あらかじめ用意されています。
Matchメソッドでは、引数に正規表現が使えるので、簡単にメールアドレスをチェックすることができます。
ただし、正規表現はとても奥が深く、それだけで一冊の本になるほどです。
正規表現ポケットリファレンス
したがって今回紹介するのは、最もシンプルな例だとお考えください。
メールアドレスの正規表現の書き方は、いろいろありますが、今回参考にさせていだだいたのは、以下のWebサイトです。
・Perl5 で CGI! - 正規表現
もっと正確にチェックする正規表現は、かなり複雑です。
・RFCに準拠したメールアドレスの正規表現
それでは実際に、VBAプログラムの中に組み込んでみましょう。
【1】Excelのファイル「メール送受信.xls」を開きます。
*マクロを有効にする
【2】VBEを起動します。
*「Altキー」+「F11キー」
【3】フォーム「frm送信」を選択し、「コードの表示」ボタンをクリックします。
【4】「cmd送信」クリック時のプログラムを、一部変更します。
赤枠で囲った部分を追加するだけです。
・追加部分のみ掲載
'メールアドレスが有効かチェック
Dim match As Integer
Dim target As String
Dim regstr As String
regstr = "/^[\w\-+\.]+\@[\w\-+\.]+$/i"
For i = startPos To endPos
'ワークシートの値を取得
eMail = Trim(Range("B" & i).Value)
target = eMail
match = bobj.match(regstr, target)
If match = 0 Then
Me.lblMsg = "行番号" & i & "のメールアドレスが正しくありません。"
'メール送信ボタン使用不可
Me.cmd送信.Enabled = False
Exit Sub
End If
Next i
*「\」はWindowsでは円記号のことです。
*プログラムを追加する場所が、とても大事です。
BASP21のメソッドを使っているため、オブジェクトを作成した後でないとエラーになります。
【5】プログラムを追加したら、VBEを保存してください。
【6】続けて、動作確認を行ないます。
ワークシート「送信」で、わざと間違ったメールアドレスを設定してください。
次にフォームを表示して、メールを送信します。件名や本文は適当でかまいません。
・正しいメールアドレスの場合は、これまで通り送信できます。
・メールアドレスとして正しくない表現の時は、メッセージが表示され、送信できません。
「正しくない表現」とは、例えば以下のような場合です。
・「@」が無い
・空白が混じっている
・日本語が混じっている
他にもいろいろ試してみてください。
【7】動作確認が済んだら、ワークシート「送信」のメールアドレスを元に戻します。
VBAプログラムの解説は、次のステップで行ないます。
【補足】
正規表現についてもっと詳しく知りたい方は、Yahoo!やGoogleのような検索エンジンで検索すると、多くのWebサイトが見付かります。
検索キーワードの例
正規表現 メールアドレス Perl5 RFC
キーワードの組み合わせが少ないほど、情報はたくさん見付かりますが、BASP21で使えるのは、Perl5互換の正規表現です。