FileSystemObjectオブジェクト

FileSystemObjectの使用宣言とメソッド・プロパティ一覧

'FSOの宣言
Dim bhFSO As FileSystemObject
'Dim bhFSO As Object
Set bhFSO = CreateObject("Scripting.FileSystemObject")
'FSOの解放
Set bhFSO = Nothing

FileSystemObjectをコーディングする際には、事前バインディングが便利なので以下の記事を確認して参照設定を行ってください

コード解説

Dim bhFSO As FileSystemObject

これは事前バインディングを行うと使用できる変数の型宣言です
この変数名を使用すると、FileSystemObjectのメソッド等をインテリセンス入力が出来るようになります

'Dim bhFSO As Object

これは事前バインディングを行わなくても使用可能な汎用的な変数の型宣言です
参照設定を行わなくても使用可能なので、コーディング終了後はこちらの宣言を有効にすることで配布用にすることができます

これはコメントアウトしてありますので、先頭の「’」を消去して有効にしてください、その際に1行目の宣言に「’」を入力してコメントアウトします

Set bhFSO = CreateObject("Scripting.FileSystemObject")

このコードを実行すると、FileSystemObjectのインスタンスが作成され、使用可能な状態になります

このコードは基本的には実行時バインディングで行うものですが、最終的にこちらのコードを使用することと事前バインディング時でも使用可能なのでこのコードを使用します

Set bhFSO = Nothing

FileSystemObjectの使用が終わったらこのコードで変数の解放を行います

使用後に挿入して、必ず行ってください。

このコードが実行されるとFileSystemObjectは使用できなくなります

FileSystemObjectのメソッド

コードにより変数「bhFSO」にFileSystemObjectのインスタンスを代入しますので、以降は変数名で処理を実行していきます

オブジェクトは作成した変数を固定で使用します
便宜上、上記で宣言した変数名で以下に記載しています
(bhFSOは変数名なので、可変です)

ScrollBarsプロパティ

ScrollBarsプロパティはスクロールバーの表示設定を行います。各表示設定のコード

'フォームに縦横のスクロールバーを表示
Me.ScrollBars = fmScrollBarsBoth
'フォームに横のスクロールバーを表示
Me.ScrollBars = fmScrollBarsHorizontal
'フォームに縦のスクロールバーを表示
Me.ScrollBars = fmScrollBarsVertical
'フォームのスクロールバーを非表示
Me.ScrollBars = fmScrollBarsNone

「ScrollBars」プロパティは、コントロールの領域を移動させるスクロールバーを表示するかの設定です

スクロールバーの表示設定の動き
スクロールバーの表示を変更

UserFormとFrame・MultiPageコントロールが指定可能です

このプロパティはあくまでも表示の設定になりますので、範囲外の有無には関係ありませんが、範囲外があってもこのプロパティで表示設定を行っておかないと、その範囲外を移動することが出来ません

このプロパティは、KeepScrollBarsVisibleプロパティも表示する設定になっておかないと表示されません
(KeepScrollBarsVisibleプロパティの記事はこちら)

範囲外がどれだけあるかによって、この設定は変更してください
面倒であれば、「fmScrollBarsBoth」(縦横表示)の設定で構いません
範囲外が無かったとすると、移動のスクロールが出来ないのでそれはそれで範囲外が無いことをユーザーに知らせることが出来ますので

TextBoxとRefEditコントロールについて

TextBox・RefEditコントロールにもこのプロパティが存在します

このプロパティを表示設定にしても、この2つのコントロールはスクロールバーが表示されません

この2つは入力内容がはみ出た時に初めて表示されるためです
なので、この2つにはKeepScrollBarsVisibleプロパティが存在しません
入力内容による自動判定になります

横のスクロールバーの場合は、文字列がコントロールの横幅を超えてはみ出すと表示されます
この際WordWrapプロパティがFalseになっていなければ表示されません
このプロパティで折り返しの表示がされると、横にはみ出すことがなくなるからです

縦のスクロールバーが改行を行うことで表示されます
なので、MultiLineプロパティをTrueに設定しておく必要があります
このプロパティでコントロール内で改行が有効になるためです

上記のことから、この2つのコントロールでのプロパティ設定は動的な判断になりやすいので3つのプロパティを駆使して、作成を行ってください

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