【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をコピーしました