こんにちは、Ryoです。
VBAでユーザーフォームを扱うことも多いと思いますが、その中でフォームやテキストボックス、コマンドボタン上でマウスポインタを適宜変更し視覚的に表現することで使いやすくできます。今回はその処理を行うMousePointerプロパティやMouseIconプロパティについて書いていきます。
1.サンプル概要
テキストボックスが1つ、コマンドボタンが2つある以下のようなユーザーフォームを例として作っています。

サンプルコードから起動させると、ユーザーフォーム上では「不可」シンボル、テキストボックス1上では「矢印と砂時計」、コマンドボタン1上では「矢印と疑問符」、コマンドボタン2上では「指定アイコン」がそれぞれ表示されます。
≪ユーザーフォーム上の「不可」シンボル≫

≪テキストボックス1上の「矢印と砂時計」≫

≪コマンドボタン1上の「矢印と疑問符」≫

≪コマンドボタン2上の「指定アイコン」≫

ちなみにマウスカーソルなどは「PrintScreen」ではキャプチャできませんので、「Windowsキー」と「+」キーで立ち上がる「拡大鏡」を使用することでマウスカーソルなどを画像として取り込むことができますから知っておくと便利です。
以下画像の上部で「設定」から「固定」を選択するところですが、画像下部の「拡大鏡」内部ではマウスカーソルが写っています。

では、次にフォーム上でマウスポインタを変更する方法について書いていきます。
2.サンプル構成
◆ユーザーフォーム構成
構成は以下の通りUserForm1にTextBox1、CommandButton1、CommandButton2を配置したものです。

今回はフォーム上のボタンなどから動作させるものではないので、配置だけされていれば本サンプルでは大丈夫です。
◆サンプルコード
これは「標準モジュール」に記述して動作させます。
Sub Sample1()
With UserForm1
'フォーム上のマウスポインタを
'「不可」シンボル設定
.MousePointer = fmMousePointerNoDrop
'テキストボックス1のマウスポインタを
'「矢印と砂時計」設定
.TextBox1.MousePointer _
= fmMousePointerAppStarting
'コマンドボタン1上のマウスポインタを
'「矢印と疑問符」設定
.CommandButton1.MousePointer _
= fmMousePointerHelp
With .CommandButton2
'コマンドボタン2上のマウスポインタを
'「指定アイコン」(カスタム)設定
.MousePointer = fmMousePointerCustom
.MouseIcon = LoadPicture _
(ThisWorkbook.Path & "\SampleIcon.ico")
End With
'各々マウスポインタを設定後、フォーム表示
.Show
End With
End Sub
実行するとUserForm1が表示され、設定した各部位でマウスポインタが表示されると思います。
このようにマウスポインタの形状を設定する場合には「MousePointerプロパティ」を使用します。
オブジェクト.MousePointer = fmMousePointer***(値)
構文で指定するアイコン形状の定数は以下の通りです。
| 定数 | 内容 |
| fmMousePointerDefault | 標準ポインタ |
| fmMousePointerArrow | 十字ポインタ |
| fmMousePointerIBeam | Iビーム |
| fmMousePointerSizeNESW | 右上、左下を指す両端矢印 |
| fmMousePointerSizeNS | 上下を指す両端矢印 |
| fmMousePointerSizeNWSE | 左上、右下を指す両端矢印 |
| fmMousePointerUpArrow | 上向き矢印 |
| fmMousePointerHourglass | 砂時計 |
| fmMousePointerNoDrop | 「不可」シンボル(円+対角線) |
| fmMousePointerAppStarting | 矢印と砂時計 |
| fmMousePointerHelp | 矢印と疑問符 |
| fmMousePointerSizeAll | サイズ変更カーソル(上下左右) |
| fmMousePointerCustom | MouseIconプロパティで指定したアイコンを使用 |
またアイコンを指定して設定したい場合は「MouseIconプロパティ」と組み合わせることで対応できます。
オブジェクト.MouseIcon = LoadPicture(pathname)
構文としてはこのようになりますのでサンプルコード内ではCommandButton2のマウスポインターを「fmMousePointerCustom」で設定し、その次にMouseIconプロパティ、LoadPicture関数でアイコンファイルを読み込んでいます。
With .CommandButton2
.MousePointer = fmMousePointerCustom ’カスタム指定
.MouseIcon = LoadPicture _
(ThisWorkbook.Path & “\SampleIcon.ico”) ’アイコンファイルの指定
End With
Loadpicture(pathname)のパスは指定ファイル保存先に合わせて適宜変更して使用すれば大丈夫です。
3.まとめ
マウスポインタの形状は特に変更しなくてもプログラム自体の動作には支障ありませんので気にしなくても良い部分ではありますが、「使い勝手」というものは結局ちょっとした気遣いで大きく変わるものですよね。
コード自身も数行程度のちょっとした記述で変更できますから、今後製作する過程で表現する状況などがあればご検討くださいませ。ただし、あまり頻繁に形状変化しすぎるのも落ち着かない印象になりますからご注意を。
以上、フォーム上のマウスポインタを変更・設定する方法についてでした!今回の記事が何かの参考になれば幸いです。
Ryo

