教えて!ExcelVBA!

ExcelVBAの基礎知識・書き方について紹介します。

ExcelVBAでフォーム内のコマンドボタン上でマウスポインタの形状を変更する方法

構文

構文は以下の通りです。

コマンドボタン名.MousePointer = マウスポインタ形状

解説

コマンドボタン名は、フォーム内のコマンドボタンの名前です。MousePointerは、マウスポインタの形状を変更できます。代表的なものは以下の通りです。

【マウスポインタ形状】

定数 内容
fmMousePointerDefault 0 デフォルトのポインタ(通常の矢印)
fmMousePointerArrow 1 矢印(標準のマウスポインタ)
fmMousePointerCross 2 クロスポインタ(十字型)
fmMousePointerIBeam 3 Iビーム(テキスト選択用)
fmMousePointerSizeNESW 6 対角方向のサイズ変更(右下↔左上)
fmMousePointerSizeNS 7 垂直方向のサイズ変更(上下)
fmMousePointerSizeNWSE 8 対角方向のサイズ変更(左下↔右上)
fmMousePointerSizeWE 9 水平方向のサイズ変更(左右)
fmMousePointerUpArrow 10 上向き矢印
fmMousePointerHourGlass 11 矢印と砂時計(処理中を示す)
fmMousePointerNoDrop 12 禁止(操作不可を示す)
fmMousePointerAppStarting 13 アプリケーションの開始(砂時計+矢印)
fmMousePointerHelp 14 ヘルプポインタ(?マーク付き)
fmMousePointerSizeAll 15 全方向のサイズ変更(移動用)

プログラミング例

具体的なプログラミング例を紹介します。

Private Sub CommandButton1_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    ' コマンドボタン上でマウスポインタの形状を変更する
    CommandButton1.MousePointer = 11
End Sub
Private Sub UserForm_MouseMove(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
    ' フォーム上でマウスポインタを元に戻す
    CommandButton1.MousePointer = 0
End Sub

上記のCommandButton1_MouseMoveイベントは、マウスポインタがコマンドボタン上を移動したときに発生します。このイベントを利用して、ボタン上に来たときにポインタを変更することができます。MousePointerに11を指定しているので、マウスポインタが矢印と砂時計に変わります。また、UserForm_MouseMoveイベントは、フォーム上でマウスが移動した際に発生します。ボタンからマウスが外れたとき、このイベントを使ってマウスポインタを元に戻します。

まとめ

MousePointerを使用してコマンドボタン上のマウスポインタの形状を自由に変更できます。MouseMoveイベントを使用すると、特定のエリアでだけ形状を変えることができ、ユーザーに対して直感的な操作体験を提供することができます。