2012年9月29日土曜日

EXCELフォームの表示(VBA)

Excel の Form を表示させるときのメモ
普通に表示させるだけなら、簡単だが大抵はフォームで入力を受け付け、
呼び出し元のモジュールで値を受け取る事が多いだろう、
例えばメール送信用のダイアログを作成する場合。


MailFormクラス
' メンバ変数 送信ボタンが押されたときにTrueになる。
Private send_clicked_ As Boolean

' メンバ変数へのゲッター
Public Property Get Result() As Boolean
    Result = send_clicked_
End Property

Private Sub CancelButton_Click()
    Hide
End Sub

Private Sub SendButton_Click()
    send_clicked_ = True
    Hide
End Sub


標準モジュール(フォーム呼び出し側)
Sub OnMailButtonClick()
    Dim attach_path As String: path = "C:\hoge.xls"

    Dim ret As Boolean
    Dim f   As New MailForm

    ' 初期入力値があれば、設定しておく。
    f.ToTextBox.Text         = "mail1@mail.com, mail2@mail.com, mail3@mail.com"
    f.SubjectTextBox.Text    = "●●の件について"
    f.BodyTextBox.Text       = "本文 ごにょごにょ…"
    f.AttachmentTextBox.Text = _
    Dir(attach_path) & Format(FileLen(attach_path) / 1000, " (#,##KB)")

    ' モーダルフォームで表示させる。
    f.Show

    ' Xボタンで閉じられている可能性がある為、エラートラップしておく。
    On Error Resume Next
    ret = f.Result
    On Error GoTo 0

    If True = ret Then
        ' TODO: 送信ボタンが押されている時の処理。
        MsgBox f.BodyTextBox.Text
    End If

    ' フォームの解放
    Unload f
    Set f = Nothing
End Sub

ポイントとしては、Xボタンで閉じられると、フォームがUnloadされる為、
プロパティへのアクセス時にエラーが発生する。
その為、フラグ変数を調べる際はエラートラップが必要。

また、フォーム側では閉じる際に Hideメソッドを使い、Unload は呼び出し側で行う。

0 件のコメント:

コメントを投稿