Excel VBAのユーザーフォームに配置されたコントロールの色を、マウスオーバーで変更する方法について説明します。

サンプルコード
ユーザーフォームに配置されたコマンドボタンが、マウスオーバーで色が変化するサンプルです。
以下のフォームとクラスを使用します。
- ユーザーフォーム:UserForm1
- クラス:UserForm1Event
ユーザーフォーム(UserForm1)
以下の手順でユーザーフォームを作成します。
- コマンドボタンを配置します。名前は何でもOKです。
- UserForm1に以下のコードを入力します。
Option Explicit
'---宣言---
Dim conList As New Collection 'ボタンイベント割り当て用
'---フォーム初期化---
Private Sub UserForm_Initialize()
'ボタンにマウスオーバーイベントをセット
Dim con As control
Dim UserForm1Event As UserForm1Event
For Each con In Me.Controls
If TypeName(con) = "CommandButton" Then
Set UserForm1Event = New UserForm1Event
UserForm1Event.ButtonEventSet con
conList.Add UserForm1Event
Set UserForm1Event = Nothing
End If
Next
End Sub
'---フォームのマウスオーバー処理---
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Call MouseOver
End Sub
'---マウスオーバー処理ー---
Public Sub MouseOver(Optional ByRef con As Object)
'ボタン色一時保管用
Static selectBtnName As String
Static selectBtnColor As Long
'選択済みのボタン色をもとに戻す
If con Is Nothing Then
If selectBtnName <> "" Then
Me(selectBtnName).BackColor = selectBtnColor
End If
ElseIf selectBtnName <> "" And selectBtnName <> con.Name Then
Me(selectBtnName).BackColor = selectBtnColor
ElseIf selectBtnName = con.Name Then
Exit Sub
End If
'ボタン外の場合はボタン色一時保管用を初期化して終了
If con Is Nothing Then
selectBtnName = ""
selectBtnColor = 0
Exit Sub
End If
'現在のボタン色を記録
selectBtnName = con.Name
selectBtnColor = con.BackColor
'選択中のボタン色を変更
con.BackColor = RGB(144, 232, 4)
End Sub
クラス(UserForm1Event)
マウスオーバー時にボタンの色を変化させるイベントのコードです。
Option Explicit
'---宣言---
Dim WithEvents btn As MSForms.CommandButton 'ボタンイベント割り当て用
'---ボタンのマウスオーバー処理のイベントをセット---
Sub ButtonEventSet(con As MSForms.CommandButton)
Set btn = con
End Sub
'---ボタンのマウスオーバー処理---
Private Sub btn_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Call UserForm1.MouseOver(btn)
End Sub
動作確認
準備が完了したらフォームを起動してみましょう。
ボタンにマウスポインタを近づけると色が変わり、離すと色が元に戻ります。
