【Excel VBA】マウスオーバーでコントロールの色を変更する方法

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

サンプルコード

ユーザーフォームに配置されたコマンドボタンが、マウスオーバーで色が変化するサンプルです。

以下のフォームとクラスを使用します。

  • ユーザーフォーム:UserForm1
  • クラス:UserForm1Event

ユーザーフォーム(UserForm1)

以下の手順でユーザーフォームを作成します。

  1. コマンドボタンを配置します。名前は何でもOKです。
  2. 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

動作確認

準備が完了したらフォームを起動してみましょう。

ボタンにマウスポインタを近づけると色が変わり、離すと色が元に戻ります。

タイトルとURLをコピーしました