Excel VBA ユーザーフォームのMouseMoveイベント フォーム上にマウスが移動したら実行

ユーザーフォーム作成/操作

Excelのユーザーフォーム上にマウスが移動したときに実行される、MouseMoveイベントについてご説明します。

MouseMoveイベントは、マウスがユーザーフォーム上に来たときに何らかの処理を行いたい時に使用します。

このイベントは使い方はさまざまです。

例えば、ユーザーフォームの使い方を説明するテキストを表示したり、ユーザーフォーム上にマウスがある間は継続して続けたい処理など、組み込みたい時に使用すると便利です。

また、フォーム上のマウスの水平、垂直位置を取得する事も出来ます。

コントロールのイベントに使うことが多いイベントで、ユーザーフォームで使用する頻度としては、あまり高くないイベントかもしれません。

今回はユーザーフォームと別に図形を用意して、マウスがユーザーフォームの上に移動したら、図形にテキストを表示するサンプルや、マウスの位置の取得を方法について説明したいと思います。

その他のイベントについては、下記記事をご覧ください。

1.MouseMoveイベントの使い方

MouseMoveイベントとは

ユーザーフォームが表示されている間に、ユーザーフォーム上にマウスが移動したときに実行されるイベントです。

「MouseMove」を使用します。

対象となるユーザーフォーム上にマウスがあり続ける間、実行され続けてしまいますので、処理内容によっては「Boolean」や分岐処理によって制御を組み込む必要があります。

また、ユーザーフォームの外枠部分はイベントが実行されませんので「×」ボタンを押すことでフォームを閉じる事が出来ます。

MouseMoveイベントの生成方法

イベントを組み込みたいユーザーフォームを選択して、フォームモジュールを開きます。

右クリックしてコードの表示を選択するか、ユーザーフォームをWクリックすると開きます。

開いた直後は他のイベントが記述されていない場合は、「Clickイベント」が自動で生成されます。

今回はClickイベントは使用しないので、そのままもしくは削除して構いません。

図の右側の「Click」をリストから「MouseMove」に変更します。

「MouseMove」を選択するると自動的にイベントプロシージャの「Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)」が生成されます。

引数がたくさんありますので簡単に説明します。

引数一覧
引数説明
Buttonマウスの押されたボタンを整数で返します。
1:左ボタン
2:右ボタン
3:中央ボタン
Shiftマウスが押されたときに一緒にShiftキー、Ctrlキー、Altキーが押された場合は整数で返します。
0:押されていない
1:Shiftキー
2:Ctrlキー
4:Altキー
Xマウスの水平位置をポイント単位で返します。
Yマウスの垂直位置をポイント単位で返します。

2.MouseMoveイベントで図形にテキストを表示する

まずはMouseMoveイベントが実行された際に、予め用意してある図形にテキストを表示する方法について説明したいと思います。

図形とフォームを用意する

何の特徴もない塗りつぶしが白の図形と

何の特徴もない追加しただけのユーザーフォームです。

標準モジュール

まずは標準モジュールに記述するコードです。

フォームを開く

とりあえずユーザーフォームを開くコードです。

Sub FormShow()

    UserForm1.Show vbModeless

End Sub
図形にテキストを表示する

次にイベント実行時に図形にテキストを表示するコードです。

図形の操作については「図形(オートシェイプ)にテキスト・文字列の入力方法」をご覧ください。

「今開いているフォームはUserForm1です。」という文字を図形に表示します。

フォーム上にマウスがある間、イベントが実行され続けるため、図形が空白の時だけテキストが書き込まれるようにしています。

Sub Text_Add()

Dim MyStr As String

MyStr = "今開いているフォームはUserForm1です。"

With ActiveSheet
    
    With .Shapes(1).TextFrame.Characters 'テキスト
        .Text = MyStr '文字列
        .Font.Size = 10 '文字のサイズ
        .Font.Bold = True
    End With

End With

End Sub

フォームモジュール

次にUserForm1のフォームモジュールにMouseMoveイベントを生成して、以下のコードを記述します。

こちらは単純に先ほどの「Sub Text_Add()」を呼び出しているだけです。

Private Sub UserForm_MouseMove(ByVal Button As Integer, _
                                ByVal Shift As Integer, _
                                ByVal X As Single, _
                                ByVal Y As Single)

Call Text_Add

End Sub

実行する

上記のフォームを開くための「Sub FormShow()」実行します。

開いたら、UserForm1上にマウスが移動したら、図形に指定した文字列が入力されます。

3.マウスの位置を取得する

ユーザーフォーム上にマウスを移動して、マウスの位置をポイントで取得する方法です。

標準モジュール

イベントが実行されたら、イベントプロシージャで取得したX位置とY位置を受け取ります。

あとは先程と同じ様に、図形に反映するだけです。

Sub Mouse_Position(ByVal X As Single, ByVal Y As Single)

Dim MyStr As String

MyStr = "水平位置は" & X & "です。" & vbLf & _
            "垂直位置は" & Y & "です。"
            
With ActiveSheet
    
    With .Shapes(1).TextFrame.Characters 'テキスト
        
        .Text = MyStr '文字列
        .Font.Size = 10 '文字のサイズ
        .Font.Bold = True
        
    End With

End With

End Sub

フォームモジュール

ファームモジュールのMouseMoveイベントは、先程作った「Mouse_Position」を呼び出すだけですが、呼び出す時にXとYの値を受け渡しています。

Private Sub UserForm_MouseMove(ByVal Button As Integer, _
                                ByVal Shift As Integer, _
                                ByVal X As Single, _
                                ByVal Y As Single)

Call Mouse_Position(X, Y)

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