MousePointerプロパティ

MousePointerプロパティはコントロールとマウスが重なったときに表示される画像の設定です

マウスポインター(標準)
標準
'フォームのマウスアイコン変更(標準)
Me.MousePointer = fmMousePointerDefault
マウスポインター(矢印)
矢印
'フォームのマウスアイコン変更(矢印)
Me.MousePointer = fmMousePointerArrow
マウスポインター(十字)
十字
'フォームのマウスアイコン変更(十字)
Me.MousePointer = fmMousePointerCross
マウスポインター(Iビーム)
Iビーム
'フォームのマウスアイコン変更(Iビーム)
Me.MousePointer = fmMousePointerIBeam
マウスポインター(両矢印右斜め上)
両矢印右斜め上
'フォームのマウスアイコン変更(両矢印右斜め上)
Me.MousePointer = fmMousePointerSizeNESW
マウスポインター(両矢印上下)
両矢印上下
'フォームのマウスアイコン変更(両矢印上下)
Me.MousePointer = fmMousePointerSizeNS
マウスポインター(両矢印左斜め上)
両矢印左斜め上
'フォームのマウスアイコン変更(両矢印左斜め上)
Me.MousePointer = fmMousePointerSizeNWSE
マウスポインター(両矢印左右)
両矢印左右
'フォームのマウスアイコン変更(両矢印左右)
Me.MousePointer = fmMousePointerSizeWE
マウスポインター(矢印上)
矢印上
'フォームのマウスアイコン変更(矢印上)
Me.MousePointer = fmMousePointerUpArrow
マウスポインター(待機)
待機
'フォームのマウスアイコン変更(待機)
Me.MousePointer = fmMousePointerHourGlass
マウスポインター(禁止)
禁止
'フォームのマウスアイコン変更(禁止)
Me.MousePointer = fmMousePointerNoDrop
マウスポインター(矢印と待機)
矢印と待機
'フォームのマウスアイコン変更(矢印と待機)
Me.MousePointer = fmMousePointerAppStarting
マウスポインター(矢印とヘルプ)
矢印とヘルプ
'フォームのマウスアイコン変更(矢印とヘルプ)
Me.MousePointer = fmMousePointerHelp
マウスポインター(十字矢印)
十字矢印
'フォームのマウスアイコン変更(十字矢印)
Me.MousePointer = fmMousePointerSizeAll

「MousePointer」プロパティはコントロールの上にマウスカーソルが重なった際に表示されるアイコンの画像の設定です

ここで設定した画像に変化しますので、処理の内容によって表示を分岐させるとユーザーにより操作が分かり易くなる可能性があります

たとえば、操作がまだ実行できない(入力内容が不足している)状態で実行ボタンを禁止アイコンに表示してあげれば、メッセージを表示しなくても実行が不可の状態であることがわかります

ただ、わざわざそこまでしてユーザーに情報表示をするかは少し疑問かもしれませんので、使用場面はあまり無いと思います

また、例にはありませんが「fmMousePointerCustom」という設定もありますがこれはMouseIconプロパティで指定した画像を表示する設定です
こちらは画像の作成が必要なため、業務処理作成においてはさらに使用場面は無いと思います
そのため、割愛しております

このプロパティはあくまでもコントロールにマウスが重なったときの表示になるので、処理中の表示をしたいからと待機表示の「fmMousePointerHourGlass」に設定しても通常の待機中の意味にはなりません
そういった目的での使用はできません

Left・Topプロパティ

Left・Topプロパティではコントロールの表示位置を設定します。簡単な使い方も解説

'表示位置の変更(左からの距離)
Me.Left = 60
'表示位置の変更(上からの距離)
Me.Top = 40
'左からの距離を取得
Debug.Print Me.Left
'上からの距離を取得
Debug.Print Me.Top

「Left」プロパティは左からの表示位置、「Top」プロパティは上からの表示位置の設定です
これら2つのプロパティはセットで扱うことが多いのでまとめておきます

このプロパティはコントロールの表示位置を指定するものです
UserFormだけは、PC画面の端を起点にします
それ以外のコントロールは、UserFormの表示領域の端を起点にします

Leftの位置の説明
Leftプロパティの位置

Leftプロパティは、左端からの距離を数値で指定します
矢印の位置を調整するプロパティです

Topの位置の説明
Topプロパティの位置

Topプロパティは上端からの距離を数値で指定します
こちらも画像の矢印の位置を調整するものになります

2つの共通点と使用場面

2つとも、指定する数値は小数点数値も可能です
また、マイナス数値も指定可能でその場合は表示領域からはみ出る形になります

つまり、コントロールサイズを超えるマイナス値を指定すれば一時的にコントロールを隠すことが出来ます
ただ、UserFormでも各コントロールでも非表示の設定が可能なのであまり意味はありません

なお、UserFormでこれらのプロパティを使用するにはStartUpPositionプロパティを「手動」に設定する必要があります
先にこれらのプロパティを変更すると、自動的に「手動」に設定されますが変更していたら変わらないので位置を調整したいときは確認してください

基本的にはコントロールに使用することはほぼありません
動的にコントロールを作成するような場面くらいかもしれません
デザインが崩れてしまうからです

なので、使ったのはこのプロパティ値を取得して、セルにでも保存しておき
次回フォームを開くときにその数値を取得して、前回閉じるときと同じ場所に表示させるような動きに使いました

入力補助フォームであれば、人によって表示してほしい箇所が微妙に違っているかなと思って、前回と同じ場所に表示されれば、表示されるごとにいちいち移動させなくて済みます

KeepScrollBarsVisibleプロパティ

KeepScrollBarsVisibleプロパティはスクロールバーの表示設定です。基本は既定値で使用

'水平・垂直両方表示
Me.KeepScrollBarsVisible = fmScrollBarsBoth
'表示しない
Me.KeepScrollBarsVisible = fmScrollBarsNone
'水平のみ表示
Me.KeepScrollBarsVisible = fmScrollBarsHorizontal
'垂直のみ表示
Me.KeepScrollBarsVisible = fmScrollBarsVertical

「KeepScrollBarsVisible」プロパティはスクロールバーを必要な時にも表示するかを設定します

必要な時というのは、フォームの表示領域からコントロールがはみ出している状態ではありません
ScrollBarsプロパティの設定値をスクロールバーの表示設定にした時です

このプロパティは既定値は「fmScrollBarsBoth」であり、水平も垂直も両方を表示する設定です

ただ、このプロパティ単体をいくら変更してもスクロールバーが表示されることはありません
上記のScrollBarsプロパティで、いずれかを表示する設定にする必要があります
このプロパティの既定値は表示しない設定になっているので、このScrollBarsプロパティを表示する設定にして、KeepScrollBarsVisibleプロパティも表示する設定にして初めてスクロールバーが表示されます

つまり、どちらかでも非表示なら非表示になるということになります

このプロパティの存在意義はともかくとして、このような作りになっていることから基本的にこのプロパティは既定値で固定にしておいて問題はありません
表示設定はScrollBarsプロパティで行えば良いです

Height・Widthプロパティ

Height・Widthプロパティはコントロールの高さと横幅を調整するプロパティです

'フォームの高さを300にする
Me.Height = 300

'フォームの横幅を300にする
Me.Width = 300
'フォームの高さを取得
Debug.Print Me.Height

'フォームの横幅を取得
Debug.Print Me.Width

Heightプロパティはコントロールの高さ、Widthプロパティはコントロールの横幅を調整するプロパティです
基本的にコントロールのサイズの調整に関するプロパティで同じ役割なのでまとめておきます

全てのコントロールのサイズ調整に使用できますが、実際コード中で使用することはほぼありません、このプロパティを変更してもフォーム上での位置であったり表示される文字もサイズがそのままなのでデザインが崩れるだけだからです

デザインモードでマウス操作によりコントロールのサイズを調整した場合は自動的にこのプロパティは更新されます

ちなみに、UserFormはタイトルバーも含めてのサイズなので作業領域はその分マイナスなのでそこを考慮している場合は注意してください

このプロパティの使用時として、やはりフォームの画面サイズに合わせて自動サイズ調整を行うときかなと思います
(自動調整を行う方法はこちらの記事へ)

ForeColorプロパティ

ForeColorプロパティではコントロールの前景色(文字色)を変更できます

'表示文字色を赤にする
Label1.ForeColor = RGB(255, 0, 0)
'表示文字色を黒にする
Label1.ForeColor = RGB(0, 0, 0)
'表示文字色の取得
Debug.Print Label1.ForeColor

「ForeColor」プロパティは前景色の色設定です
前景色とは、ほとんどのコントロールでは表示される文字の色になります

色の設定に関しては、下記リンクの「BackColorプロパティ」の記事へ
(プロパティウィンドウでの色設定はこちらを確認)

前景色の色変更時の動き
前景色の変更

前景色という表現になる理由は、画像の右下にあるScrollBarとSpinButtonの2つが文字ではないためです

この2つは▲の色が変更されます
これは文字ではなく指定できるものでもありません

それ以外は表示されている文字の色になるので、基本的には文字色という認識で問題ないです
画像の例では、文字色を黒と赤を切り替えています

TextBoxなどの入力内容の文字色も変更できるので、内容によって文字色を変更させることでユーザーにより分かり易く情報を提供できます

また、色の指定にはRGB関数が1番便利なのでこの関数を使用して指定します

Fontプロパティ

Fontプロパティで文字の種類や大きさなどの変更を行うコードとFontオブジェクトとしての解説

'表示文字種を「Meiryo UI」にする
Label1.Font.Name = "Meiryo UI"
'表示文字を太字
Label1.Font.Bold = True
'表示文字を斜体
Label1.Font.Italic = True
'表示文字サイズを20にする
Label1.Font.Size = 20
'表示文字に取り消し線を引く
Label1.Font.Strikethrough = True
'表示文字に下線を引く
Label1.Font.Underline = True

「Font」プロパティはコントロールに表示する文字の設定を行うプロパティです
ただ、このプロパティのみ特別で実際にはFontオブジェクトの設定になります
なので、コントロールのFontオブジェクトのプロパティを変更する、というのが実際の動きになります

Fontの設定を開くボタン
デザイン画面でのオプション設定の開くボタン

まず、デザイン画面のプロパティウィンドウでの文字の設定には、Fontのボックスを選択状態にすると表示されるボタンをクリックします

Fontオブジェクトの各項目の対応番号画像
フォントの設定画面

クリックすると、画像の画面が表示されます
ここで各設定を行います
コード上でもそれぞれの設定が可能です、画像の番号と合わせて解説します

1.フォント名(Font.Name = フォント名文字列)
フォント名は、使用するフォントの種類を名称文字列で指定を行います

2.太字設定(Font.Bold = True(有効)、False(無効))
太字設定は、文字を太字表示をするかの設定です。Trueなら太字になります

3.斜体設定(Font.Italic = True(有効)、False(無効))
斜体設定は、文字を斜体表示にするかの設定です。Trueなら斜体になります

4.サイズ(Font.Size = ポイント単位数値)
サイズは文字の高さをポイント単位の数値で指定します

5.取り消し線(Font.Strikethrough = True(有効)、False(無効))
取り消し線は、表示文字列に取り消し線を引く設定です。Trueなら線を引きます

6.下線(Font.Underline = True(有効)、False(無効))
下線は、表示文字列に下線を引く設定です。Trueなら線を引きます

このプロパティ設定変更での注意点

フォント名に関しては、PCにインストールされているものしか使用できません
なので、配布用のデータならあまり特殊な文字種は使わないほうが良いです

あと注意したいのが、文字種のサイズ違いによる表示文字列のはみ出しです
ユーザーに選択してもらって、動的に変更するようなフォームを作った場合は要注意です
あまりそうゆうのはしないほうがいいですが、するなら少し大きめに余白は取っておいたほうが良いかもしれません

既定の文字種というのは無く、システム既定の文字種になります

Label1.Font.Name = UserForm1.Font.Name

このコードでコントロールの文字種をUserFormの文字種に設定できます
プロパティ値の取得は、文字種の名称を文字列で取得します
まあ、あまり使用することはなさそうです

子要素には設定が引き継がれる

なお、親子関係にあるコントロール間では親の設定が子の初期設定となります

つまりUserFormで、指定した文字の設定は設定以降に作成したコントロールの初期値になりますのでフォーム作成時は最初にこのプロパティ設定を行ってから各コントロールを作成していくと設定が引き継がれて楽です

ちなみに、UserFormでの設定はこの目的で使用します
文字種をいくら変更しても、タイトルバーの文字種はOS側の設定なので変化しません

フレームコントロールやマルチページも同じように中に作成するコントロールがフレームやマルチページの設定に初期設定されます

Enabledプロパティ

Enabledプロパティではコントロールを操作不可に設定できます。切り替えのコード

'コントロールの操作不可
CommandButton1.Enabled = False
'コントロールの操作可能
CommandButton1.Enabled = True
'プロパティの取得(Trueなら可能、Falseなら不可)
Debug.Print CommandButton1.Enabled

「Enabled」プロパティは、コントロールの操作を不可にする設定です

このプロパティにFalseを代入すると、そのコントロールは操作不可となりフォーカスの取得も出来なくなります

またChangeイベントなど、コードの実行によるイベントは発生しますが、Clickイベントなどのユーザー操作によるイベントが発生しなくなります

各コントロールでFalseを設定すると、表示文字列がグレー表示になり、ユーザーの操作を一切受け付けなくなります

Flameコントロールや、MultiPageコントロールでFalseを指定した場合は、中にあるコントロール全てが操作不可となります

そして、注意したいのがUserFormでのFalseの設定です
これを行うと、フォーム内全てのコントロールの操作が不可になり、×ボタンも使用不可になります
なので、強制的に終了させる以外の終了方法が無くなりますので、ShowModalプロパティをTrueに設定したフォームで実行する場合は注意して下さい
このShowModalプロパティをFalseに設定しておけば、VBEの操作は出来るので実行メニューの「リセット」からフォームを終了させられます

このプロパティは、ユーザーの操作段階によって使えるコントロールを制限することで操作間違いを防ぐ為に使用します

Cycleプロパティ

Cycleプロパティは、コントロールのフォーカスの取得に関する設定です、変更と取得のコード

'Frame外に移動する設定
Frame1.Cycle = fmCycleAllForms
'Frame内で移動する設定
Frame1.Cycle = fmCycleCurrentForm
'設定の取得(0なら非循環、2なら循環)
Debug.Print Frame1.Cycle

「Cycle」プロパティは、Frame・MultiPageコントロール内でのコントロールのフォーカスの循環に関する設定です

どちらのコントロールでも、循環の設定にするとそのコントロール内から外のコントロールにEnterやTabでフォーカスが移動することがなくなります

cycleプロパティの設定時のフォーカスの動き
フォーカスの動き

画像では、Frameが非循環の「fmCycleAllForms」に設定し、MultiPageでは「fmCycleCurrentForm」に設定されています

Frameでは次のコントロールに移りますが、MultiPageではコントロール内での循環になります

なお、MultiPageコントロールでは、Pageごとに設定が可能です
表示しているPageでは、それぞれの指定の動きをすることになります

UserFormでも、このプロパティが指定できますがリファレンスにも記載が無く、動きの変化も見られないので設定する意味は無さそうです

コントロールの調整

コントロールの表示位置や位置の間隔調整を行う操作方法について

コントロールのZオーダーを調整する

コントロールにはZオーダーが存在します
Zオーダーとは、奥行きのことで手前に表示されるもの、奥に表示されるものを順番に設定することをいいます
これには、書式タブの順序から任意のコマンドで変更設定を行います

Zオーダーの調整方法
Zオーダーの調整方法

1のコントロールを全面に1つずつ移動して、最後に最背面に移動させています

これはExcelの画像などと同じで、背面に持っていけば後に隠れるし、前面に持っていけば前に表示されます
このZオーダーは、デザイン画面時のクリックで選択できる順番でもあるので背面のコントロールがほとんど隠れるような前面コントロールをデザインしてしまうと、背面コントロールが選択しづらくなりますので注意して下さい
選択できない場合は、一旦範囲選択で前面コントロール含めて選択してから、「Ctrl」キーで前面コントロールの選択を解除すればいいです

コントロールのリスト選択ボックス
コントロールのリスト選択

もしくは、プロパティウィンドウ上部オブジェクト選択ができるコンボボックスがありますので、そこから選択することも可能です

コントロールを等間隔に並べる

コントロールを均等の間隔に並べるには、ドラッグ操作でもかまいませんが数が多い際は面倒です

コントロールの位置間隔の調整方法
上下の間隔の均等調整

そんなときには、書式タブの「左右の間隔」「上下の間隔」で調整を行います
まず間隔がバラバラなら、最初に間隔の削除を行います
この時点でコントロールがピッタリくっつきます
重なっていた場合も離れて、ピッタリになります
この状態で、間隔を広くしていくと完全に同じ間隔でコントロールの位置を調整できます
左右上下どちらも使い方は同じなので、調整したい方向で使い分けてください

自動調整には他にもフォームの中央に配置とボタンの配置がありますが、上記の間隔調整のほうが微調整が出来るのであまり使わないかもしれません

コントロールのグループ化について

コントロールのグループ化したときの動き
グループ化したときのサイズ調整

上記の見栄えの調整を行ったら、最後にそれらをグループ化することでずれたりすることを防げます、またちょっとした移動なんかの時にも全てのコントロールを選択して引越しをしなくてすむようになります

あるあるで、すべて選択して移動させたつもりがLabelなどが置いてけぼりをくってしまっていることがありますがそういったことが無くなるので1人で不安になることが無くなりそうです
みんなが一斉にどこかに移動して自分だけ取り残されたらとんでもなく不安です、まじで

ただ、いいのか悪いのかサイズ調整をグループ化の枠線で行うと全てのコントロールが合わせてサイズが調整されるので注意が必要です、まあ自分だけでなくみんなが一斉に身長3mになったら気にならないかもしれません、ん?いや・・・

Captionプロパティ

Captionプロパティはコントロール上に表示される文字列の設定です、変更と取得のコード

'表示文字列を変更
UserForm1.Caption = "test"
'表示文字列を取得
Debug.Print UserForm1.Caption

「Caption」プロパティはコントロールに表示される文字列の設定です

プロパティ変更時の各コントロールの表示

Captionプロパティの変更の動き
表示文字列の設定変更

手順1
初期設定の文字列です

手順2
全ての文字列を消去した状態

手順3
全てのコントロールに「test」を設定した状態

各コントロールでは、表示される文字列の位置が少しずつ違います

UserFoamでは、タイトルバーのタイトル文字列が変更されます

Labelは表示文字列になるので、このコントロールでは基本のプロパティです

CheckBoxから、ToggleButtonまでの全てはコントロールの表示文字列になるのでボタン名などになります

MultiPageでは、各見出しの文字列が変更されます

Frameでは、フレームを囲む枠線の上辺に表示されます

Captionプロパティの使用時の注意点

この文字列を指定すると、実際に使用するユーザーフォーム上で表示される為、使用者がなんの機能を持ったコントロールなのかを理解できるような文字列で指定を行います

コントロールのサイズに対して、多すぎる文字数の場合ははみ出して表示されなくなりますので、処理中で文字列を変更する際は注意が必要です
ユーザーフォームでははみ出す箇所に「…」が表示されてしまうので、そちらも気にして指定してください

このプロパティを使用して、Labelコントロールではユーザーへのメッセージ表示を行うことができます
MsgBox関数では、処理が一時停止してしまう事と履歴が残らないことを考えると内容によっては非常に有効な使い方です

ユーザーフォーム以外の全てのコントロールに言える事ですが、ユーザーフォームのZoomプロパティの設定を変更すると文字がコントロールのサイズと文字のサイズが別の設定になることから、うまくコントロールに入りきらなかったり、ずれたりすることがあります
これは、コントロールと文字のサイズが一体となっているわけではない仕様のためどうしようもありませんので自動的にうまく調整する方法はありません