Excelでメール送信時の宛先を選択できるようにするプログラム。

Excelでメールを送信する時に、ワークシートから送信先(宛先)を選択できるようにします。

まず、フォーム上のテキストボックスに行番号を入力すると、Excelのワークシートから、送信先の氏名とメールアドレスを取得し、自動的にラベルに表示するプログラムを作ります。

【1】Excelのファイル「メール送受信.xls」を開きます。

*マクロを有効にする


【2】VBEを起動します。

*「Altキー」+「F11キー」


【3】フォーム「frm送信」を選択し、「コードの表示」ボタンをクリックします。

mail-117.gif


【4】左側のコンボボックスから「General」、右側のコンボボックスから「Declarations」を選択します。

mail-120.gif


【5】以下のように、モジュールの一番先頭で、変数を宣言します。

mail-121.gif


Dim pos As Long
Dim tName As String
Dim eMail As String


ここは「宣言セクション」と言い、ここで宣言した変数は、各プロシージャから利用することができます。

またモジュールとは、宣言セクションと各プロシージャを含めた、プログラム全体を指します。


【6】コンボボックスから「UserForm」、「Initialize」を選択します。

mail-122.gif

*オブジェクトとイベントは、必ずコンボボックスから選択してください。
コピーして貼り付けたり、手入力すると、動作しない原因になります。


【7】フォームを初期化時のイベントプロシージャが表示されました。

mail-123.gif


【8】以下のようにコードを入力してください。

mail-124.gif


Private Sub UserForm_Initialize()
    'メール送信ボタン使用不可
    Me.cmd送信.Enabled = False
    
    '初期値
    Me.txtPos = 2
End Sub



【9】コンボボックスから「txtPos」、「Exit」を選択します。

mail-118.gif


【10】テキストボックスから出る時(フォーカス喪失時)のイベントプロシージャが表示されました。

mail-119.gif

以下のようにコードを入力してください。

プログラムが少し長いので、イベントプロシージャの内側は、コピーペーストしてもかまいません。ただしイベントプロシージャ自体は、必ずコンボボックスから選択します。


Private Sub txtPos_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    'エラーが発生したら処理を行なう
    On Error GoTo Err_Shori
    
    'メール送信ボタン使用不可
    Me.cmd送信.Enabled = False
    
    '行番号が空白の時の処理
    If Me.txtPos = "" Then
        Me.lblMailto = "行番号を入力してください。"
        Cancel = True
        Exit Sub
    End If
    
    '行番号を取得
    pos = CLng(Me.txtPos)
      
    '行番号が2未満の時の処理
    If pos < 2 Then
        Me.lblMailto = "行番号は、2以上の数値を入力してください。"
        Cancel = True
        Exit Sub
    End If
    
    'ワークシートの値を取得
    tName = Trim(Range("A" & pos).Value)
    eMail = Trim(Range("B" & pos).Value)
    
    '未入力の項目が無いかチェック
    If tName = "" Or eMail = "" Then
        Me.lblMailto = "この行は、データが未入力の項目があります。"
        Cancel = True
    Else
        '送信先を表示
        Me.lblMailto = "氏名:" & tName & " " & "メールアドレス:" & eMail
        'メール送信ボタン使用可
        Me.cmd送信.Enabled = True
    End If
    
Err_Shori_Exit:
    Exit Sub

'ここからエラー処理
Err_Shori:
    MsgBox Err.Description, vbOKOnly + vbCritical, "実行時エラー"
    Cancel = True
    Resume Err_Shori_Exit
'ここまで

End Sub


これで準備完了です。動作確認は、次のステップで行ないます。

プログラムについては、コメントをたくさん書いているので、大体わかると思いますが、動作確認の後に、詳しく説明します。


【補足】
(1)ガイド機能について
VBEには、ガイド機能があり、プログラムを入力中に、半角で「.」(ドット)を入力すると、候補が自動的にリスト表示されます。

例えば、以下のプログラムは、両方とも同じ動作をします。
Me.cmd送信.Enabled = False
Me!cmd送信.Enabled = False

VBAでは、ユーザー定義のアイテムは「!」で区切り、プロパティなど既存のアイテムは「.」で区切ることになっています。

したがって、正確には後者のほうが正しい書き方かもしれませんが、「.」を使うと、ガイド機能が使えるので便利です。「!」では候補が表示されません。


(2)テキストボックスの値
VBAでは、同じ処理を行なう時に、いくつか書き方があります。

例えば、以下のプログラムは、全て同じ結果が得られます。
Me.txtPos
Me.txtPos.Value
Me.txtPos.Text

余裕があれば、試してみてください。

スポンサードリンク

スポンサードリンク






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