ユーザーフォーム入門
アクティブコントロールに色を付ける

Excelマクロのユーザーフォームの基礎、エクセルVBAの入門解説
公開日:2013年5月以前 最終更新日:2019-12-17

第16回.アクティブコントロールに色を付ける


ユーザーフォーム入門として基礎から解説します。
フォーム内のどこにカーソルがあるか分かりづらい場合があります。


そこで、アクティブなコントロールのバックカラーを変えたり、
対応するラベルのフォントを変更したりして、アクティブなコントロールを解り易くします。

以下はサンプルコードになります。

フォームモジュール

まずは、モジュールレベル変数の定義と、
色を設定する共通Subプロシージャーの作成です。

Private lastControl As Control
Private lastColor As Long

'・・・他の記述は省略します

Private Sub setColor(ctl As Control)
  If Not lastControl Is Nothing Then
    lastControl.BackColor = lastColor
  End If
  lastColor = ctl.BackColor
  Set lastControl = ctl
  ctl.BackColor = RGB(255, 153, 204)
End Sub

続いて、各コントロールのEnterイベントです。
各コントロールのEnterイベントで呼び出すプロシージャーの作成です。

Private Sub txtコード_Enter()
  Call setColor(Me.txtコード)
End Sub
Private Sub txt漢字名称_Enter()
  Call setColor(Me.txt漢字名称)
End Sub
Private Sub txtカナ名称_Enter()
  Call setColor(Me.txtカナ名称)
End Sub
Private Sub cmb区分_Enter()
  Call setColor(Me.cmb区分)
End Sub
Private Sub lst都道府県_Enter()
  Call setColor(Me.lst都道府県)
End Sub
Private Sub opt企業_Enter()
  Call setColor(Me.opt企業)
End Sub
Private Sub opt個人_Enter()
  Call setColor(Me.opt個人)
End Sub
Private Sub chk休止_Enter()
  Call setColor(Me.chk休止)
End Sub
Private Sub btnOk_Enter()
  Call setColor(Me.btnOk)
End Sub
Private Sub btnCancel_Enter()
  Call setColor(Me.btnCancel)
End Sub

以上で完成です。

EnterイベントとExitイベントをセットで使う方法

やり方はいろいろあります基本は同じです。
上記以外に、EnterイベントとExitイベントを使う方法もあります。
Enterイベントで色を変える、同時に、前コントロールの色を戻します。
色の戻しを、Exitイベントでやっています。

Private Sub txtコード_Enter()
  txtコード.BackColor = RGB(255, 153, 204)
End Sub
Private Sub txtコード_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  txtコード.BackColor = vbWhite
End Sub
※対象のコントロール全てについて記述します。

このような書き方になります。
全てのコントロールが対象ではなく、一部のコントロールでのみ色を変える場合は、
後のExitイベントを使った方が制御しやすいかもしれません。

対応するラベルのフォントを太字にする

これは対応するラベルがどのラベルになるかが分からないとできません。
Tagプロパティに対応するラベル名を入れておく等の方法もありますが、
今回は、命名方法を以下にしてあります。

ラベル:lbl〇〇〇
テキストボックス:txt〇〇〇
コンボボックス:cmb〇〇〇
リストボックス:lst〇〇〇

この命名規則を基に、それぞれの入力こんとろーるとラベルを対応付けしています。
先頭のプリフィックスを変更すれば、対応するラベル名にすることが出来ます。

Private Sub setColor(ByRef ctl As Control)
  If Not lastControl Is Nothing Then
    lastControl.BackColor = lastColor
    Call setLabel(lastControl, False)
  End If
  Set lastControl = ctl
  lastColor = ctl.BackColor
  ctl.BackColor = RGB(255, 153, 204)
  Call setLabel(ctl, True)
End Sub
Private Sub setLabel(ByVal ctl As Control, ByVal blnBold As Boolean)
  On Error Resume Next
  Controls("lbl" & Mid(ctl.Name, 4)).Font.Bold = blnBold
End Sub

チェックボックスやオプションボタン等は、通常ラベルを付けませんし、
他のコントロールでも、必ずラベルを付けるとは限りませんので、
対応するラベルが無い時の対応として、
On Error Resume Next
これを入れてあります。

このような処理は、書き方もいろいろありますし、
工夫次第で、よりユーザーにやさしいフォームを作成する事が可能です。
いろいろ工夫しながら挑戦してみて下さい。



同じテーマ「ユーザーフォーム入門」の記事

第13回.チェックボックス(CheckBox)の追加
第14回.オプションボタン(OptionButton)の追加
第15回.ここまでの整理と全VBA
第16回.アクティブコントロールに色を付ける
第17回.Enterキーで次のコントロールに移動する
第18回.2段階のコンボボックス
第19回.数値専用のテキストボックス
第20回.テキストボックスの各種イベント
第21回.ユーザーフォームの各種イベント
第22回.コントロールの動的作成
第23回.イベントプロシージャーの共通化


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ