Mutable_Yunの業務改善ブログ

VBA勉強中の非エンジニア会社員向けのブログです。業務改善についても触れています。

VBA テキストボックスにInitializeで値を設定する|ユーザーフォームの使い方

今回はVBAのユーザーフォームでテキストボックスにデフォルトの値を設定し、ユーザーの使い勝手を高めます。この記事はVBAで自動化ツールを作成している非エンジニアの会社員を読者に想定しています。

目次

ユーザーフォームが表示される事がトリガーのイベントプロシジャInitialize

今回はInitializeというユーザーフォームが開かれたことをトリガーにして実行されるイベントプロシジャを利用します。やりたいことは下記の様な設定をデフォルトで設定することです。

デフォルトで記入例が表示されている
今回のテーマ


それぞれのコントロールのオブジェクト名は下記の通りです。

  • ユーザーフォーム:登録フォームfm
  • ユーザー名のラベル:Label1
  • ユーザーが入力するテキストボックス:入力tb
  • 無効な値が入力されたときのラベル:エラーメッセージ
  • 「登録」のコマンドボタン:登録cb

既に下記のプログラムが作成済みです。このプログラムの意味の詳しい解説は、VBA テキストボックスの基本をご参照下さい。

Private Sub 登録cb_Click()

    Dim 入力された値 As String
    Dim 入力された値の文字数 As Long
    
    入力された値の文字数 = Len(入力tb.Value)
    
    Select Case 入力された値の文字数
        Case 0
            エラーメッセージ.Caption = "ユーザー名が入力されていません。"
            Exit Sub
        Case 1
            エラーメッセージ.Caption = "ユーザー名は2文字以上で入力して下さい。"
            Exit Sub
    End Select

    If IsNumeric(入力tb.Value) Then
        エラーメッセージ.Caption = "数値のみの名前は無効です"
        入力tb.Value = ""
        入力tb.SetFocus
        Exit Sub
    Else
        入力された値 = 入力tb.Value
    End If
    
    エラーメッセージ.Caption = ""
    Sheets(1).Cells(1, 1) = 入力された値
    
End Sub

ユーザーフォームが表示される瞬間にテキストボックスに文字を表示させる

実際にInitializeでユーザーフォームの実装を見て行きます。まずは、Initializeのイベントプロシジャを挿入します。プルダウンリストからUserForm、イベント名はInitializeを選択します。

プルダウンリストからUserFormとInitializeを選択する
Initializeのイベントプロシジャを挿入したところ

Initializeでデフォルト設定を行う

挿入されたプロシジャの中身を作成していきます。

Private Sub UserForm_Initialize()

    入力tb.Value = "例) 山田 ゆん太郎"
    入力tb.ForeColor = &HC0C0C0

End Sub

Initializeはユーザーフォームが表示された瞬間に実行されるイベントなので、初期設定にうってつけです。ユーザーが入力方法に迷わないように記入例を薄く表示させています。入力tb.ForeColor = &HC0C0C0のところがポイントです。薄い灰色にしたいのですが、色の番号が分からないので、プロパティウィンドウで調べます。実際に表示させたい色を選択して色番号を確認します。

プロパティウィンドウで実際に色を選択して、表示される番号をコピペする
プロパティウィンドウで色の番号を調べる。

ForeColorというのがテキストボックスに表示される値の文字色を設定するプロパティ名です。「&H00C0C0C0&」と表示されているので、その部分をコピーして、プログラムの中に貼り付けます。””で囲む必要はありません。すると、エディタが勝手にプログラムの中で使うのに適切な記述「&HC0C0C0」に書き換えてくれます。

【注意事項】
実際はここでデフォルト値を決めても構いません。しかし、私は上のサンプルコードのように初期化で色を設定することをオススメします。

理由は、このテキストボックスはユーザーが入力する場合には通常通り黒い文字を表示したいからです。初期設定の色でしか文字を表示しないのであれば、構いませんが、場合によって表示させる色が異なる場合は、初期設定時に色を変える方がメンテナンス時など、後から見たときに分かりやすいです。

ユーザーフォームを表示させると下の様になります。

デフォルトで記入例が表示されているのでユーザーに優しい
デフォルトで灰色の例が表示されている

選択されたらテキストボックスを空にしつつ文字の色を黒にする

入力しやすいテキストボックスになりました。しかし、このままではユーザーが入力した文字も灰色のままになってしまいます。そこで、ユーザーがテキストボックスを選択したらテキストボックスを空にしつつ、文字の色を黒に変更します。

MouseDownはクリックした瞬間に発動するイベント
入力tbにMouseDownイベントを設定

Private Sub 入力tb_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    入力tb.Value = ""
    入力tb.ForeColor = &H80000008
End Sub

これでユーザーがマウスで入力のためのテキストボックス、入力tbをクリックした瞬間に発動するイベントが完成しました。

マウスではなくTabキーで選択する場合やいきなり文字を打ち込むユーザーがいるかもしれません。キーボードで入力が始まった瞬間にも同様のプロシジャを設定しておきます。

Private Sub 入力tb_Change()
    入力tb.Value = ""
    入力tb.ForeColor = &H80000008
End Sub

これで大分ユーザーフレンドリーなコードになりました。少しの工夫で使いやすさが向上します。皆さんも少しの工夫をしてツールの完成度を高めていきましょう。

【関連記事】
ユーザーフォームを使う3ステップ
テキストボックスの基本|ユーザーフォームの使い方