Excel VBA ユーザーフォームにフレームの追加と詳細設定する方法

コントロール作成/操作

ユーザーフォームにフレームを追加する方法と詳細設定の方法をご説明します。

フレームは設置したフレーム内にほかのコントロールを格納する場合に使用します。

フレームはそれ単体自体に大した機能はありませんが、オプションボタンをフレーム内に設置する事でグループ化する事ができるなど、他のコントロールと併用して使用します。

オプションボタン以外にも、機能としてグループ化出来ないコントロールでも、視覚的にグループ化する場合にも非常に便利なコントロールです。

追加するにはツールボックスから追加する方法と、VBAから追加する方法がありますので、順にご説明します。

また、サンプルコードではループを使用して複数のコントロールの追加や、設置したフレームにコントロールを追加するコードも記載したいと思います。

その他のユーザーフォームの操作については下記記事をご覧ください。

1.ツールボックスでフレームを追加する

まずは、ツールボックスでフレームを追加する方法です。

ユーザーフォームの作成がまだの方は、VBE→挿入タブ→ユーザーフォームを選択してUserFormを作成してください。

ツールボックスが表示されていない方は、メニューの実行ボタンや停止ボタンの並びにあるツールボックスボタンをクリックしてください。

もしくは表示タブのツールボックスを選択する事で表示出来ます。

フレームを選択します。

選択したら、ユーザーフォーム上の設置したい位置でユーザーフォームをクリックします。

すると下記図のように、フレームが追加されます。

2.プロパティウィンドウで詳細設定する

フレームを大まかな位置に設置したら、次はプロパティウィンドウで詳細設定をします。

詳細設定と言ってもプロパティの種類が多すぎますので、一覧で簡単に説明します。

プロパティ一覧

定数の説明があるプロパティは赤字になっています。

プロパティ名説明
オブジェクト名コントロールの名前を指定します。
BackColorフレームの背景色をシステムまたは、カラーパレットで指定します。
BorderColorフレームの背景枠線の色をシステムまたは、カラーパレットで指定します。
BorderStyleラベルの背景枠線のスタイルを指定します。
Captionフレームに文字列を指定します。
Cycleフレーム内に設置されたコントロールが最後に実行されたあとの処理を指定します。
Enabled通常の表示と操作が出来るか指定します。
Fontフレームに設定された文字列のフォントの種類やサイズを指定します。
ForeColorフレームに設定された文字列の色を指定します。
Heightフレームの高さを指定します。
HelpConTextID指定したオブジェクトと関連付けるヘルプのコンテキストIDを指定します。
KeepScrollbarsVisibleフレーム内にスクロールバーを表示するか指定します。
Leftフレームの位置をフォームの左端を0として、ポイント単位で指定します。
MouseIconマウスポインターがフレーム上にあるときの、アイコンファイルを指定します。
MousePointerマウスポインターがフレームに移動したとき表示されるポインターの種類を指定します。
Pictureフレームの背景に設定する画像ファイルを指定します。
PictureAlignment背景に設定する画像の表示位置を指定します。
PictureSizeMode背景と画像のサイズと異なる場合にサイズをどのように設定するかを指定します。
PictureTiling画像を背景全体に並べて表示する指定します。
ScrollBarsスクロールバーを設置する方法を指定します。
ScrollHeight垂直スクロールバーのスクロールできる範囲をポイント単位で指定します。
ScrollLeft水平スクロールバーのスクロールされている位置を、左端からポイント単位で取得または設定できます。
ScrollTop垂直スクロールバーのスクロールされている位置を、上端からポイント単位で取得または設定できます。
ScrollWidth水平スクロールバーのスクロールできる範囲をポイント単位で指定します。
SpecialEffectアプリケーション内の他の操作を許可するか指定します。
TabIndexフレームにフォーカスをあてる順番を指定します。
TabStopTabIndexの有効/無効を指定します。
Topフレームの位置をフォームの上端を0としてポイント単位で指定します。
Widthフレームの幅をポイント単位で指定します。
Zoom設置されたフレームの拡大率を指定します。
BorderStyleの定数一覧

fmBorderStyleNone」が既定値となります。

定数名説明
fmBorderStyleNone0枠線を表示に指定します。
fmBorderStyleSingle1枠線を非表示に指定します。
Cycleの定数一覧

「fmCycleAllForms」が既定値となります。

定数名説明
fmCycleAllForms0フォーム上の他のコントロールに移動します。
fmCycleCurrentForm2フレーム内を移動します。
KeepScrollbarsVisibleの定数一覧

「fmScrollBarsBoth」が既定値となります。

定数名説明
fmScrollBarsNone0表示しません。
fmScrollBarsHorizontal1水平スクロールバーを表示します。
fmScrollBarsVertical2垂直スクロール バーを表示します。
fmScrollBarsBoth3水平と垂直の両方のスクロール バーを表示します
MousePointerの定数一覧

fmMousePointerDefault」が既定値となります。

定数名内容
fmMousePointerDefault0標準ポインター
fmMousePointerArrow1矢印
fmMousePointerCross2十字ポインター
fmMousePointerIBeam3Iビーム
fmMousePointerSizeNESW6右上と左下を指し示す両端矢印
fmMousePointerSizeNS7上と下を指し示す両端矢印
fmMousePointerSizeNWSE8左上と右下を指し示す両端矢印
fmMousePointerSizeWE9左と右を指し示す両端矢印
fmMousePointerUpArrow10上向き矢印
fmMousePointerHourglass11砂時計
fmMousePointerNoDrop12ドラッグされているオブジェクトに重なった不可シンボル無効なターゲット。
fmMousePointerAppStarting13矢印と砂時計
fmMousePointerHelp14矢印と疑問符
fmMousePointerSizeAll15サイズ変更カーソル (上下左右を指し示す矢印)
fmMousePointerCustom99MouseIcon プロパティで指定されたアイコンを使用します。
PictureAlignmentの定数一覧

「fmPictureAlignmentCenter」が既定値となります。

定数名説明
fmPictureAlignmentTopLeft0左上端に合わせて配置します。
fmPictureAlignmentTopRight1右上端に合わせて配置します。
2-fmPictureAlignmentCenter中央に配置します。
3-fmPictureAlignmentBottomLeft左下端に合わせて配置します。
4-fmPictureAlignmentBottomRight右下端に合わせて配置します。
PictureSizeModeの定数一覧

「fmPictureSizeModeClip」が既定値となります。

定数名説明
fmPictureSizeModeClip0元の大きさのまま表示して、表示しきれない部分は切り捨てます。
fmPictureSizeModeStretch1サイズに合わせて画像を引き伸ばします。
画像が水平方向、垂直方向にゆがむことがあります
fmPictureSizeModeZoom2必要に応じて画像を引き伸ばします。
水平方向、垂直方向にゆがまないように引き伸ばします
ScrollBarsの定数一覧

「fmScrollBarsNone」が既定値となります。

定数名説明
fmScrollBarsNone0スクロールバーを表示しません。
fmScrollBarsHorizontal1水平スクロールバーを表示します。
fmScrollBarsVertical2垂直スクロールバーを表示します。
fmScrollBarsBoth3水平スクロールバーと垂直スクロールバーの両方を表示します。

3.VBAでフレームを追加する方法

VBAでコントロールの追加は次のように記述します。

Set Object = UserForm1.Controls.Add("Forms.Frame.1","コントロールの名前","オブジェクトの表示")

コントロールオブジェクトに「Addメソッド」で追加して操作します。

フレームのコントロールIDは「Forms.Frame.1」です。

コントロールの種類とコントロールの名前、オブジェクトの表示をTrue、Falseで指定します。

オブジェクトの表示」は省略可能で、省略した場合は既定値がTrueになります。

4.サンプルコード

フレームを追加するサンプルコード

何も指定しないと左上にデフォルト設定の状態で追加されます。

また、フレームを追加する際にオブジェクト名に、フレームと判定できるような名前に指定する事をおすすめします。

追加後にVBAでコントロールを特定する際に簡単になります。

Sub Sample1()

Dim MyCtrl As Object

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.Frame.1", "MyFrame", True)
    
    .Show vbModeless

End With

End Sub

Captionなども何もないフレームがユーザーフォームの左上に追加されます。

フレームの詳細設定をするサンプルコード

フレームを追加して、位置やサイズ、Captionの設定等の詳細設定をするコードになります。

Sub Sample2()

Dim MyCtrl As Object

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.Frame.1", "MyFrame", True)
    
    With MyCtrl
        .Top = 24                           'Top位置
        .Left = 18                          'Left位置
        .Height = 100                       '高さ
        .Width = 100                        '幅
        .ForeColor = RGB(255, 0, 0)         'Caption文字色
        .Font.Name = "メイリオ"             'Captionのスタイル
        .TabIndex = 1
        .Caption = "Sample1"                '項目名
    End With

    .Show vbModeless

End With

End Sub

ループで複数のフレームを追加するサンプルコード

複数のコントロールを作成する場合は、コントロール名に番号を付けるなど、特定しやすい名前にします。

Sub Sample3()

Dim MyCtrl      As Object
Dim Leftpoint   As Long
Dim i           As Long

With UserForm1

    Leftpoint = 0 'レフト位置

    For i = 1 To 3
    
        'フレームの名前に番号を付ける
        Set MyCtrl = .Controls.Add("Forms.Frame.1", "MyFrame" & i, True)
        
        With MyCtrl
            .Top = 24                           'Top位置
            .Left = 18 + Leftpoint              'Left位置
            .Height = 100                       '高さ
            .Width = 100                        '幅
            .ForeColor = RGB(0, 0, 0)           '文字色
            .Font.Name = "メイリオ"             'テキストのスタイル
            .TabIndex = i                       'タブキーの移動の順番を指定する
            .Caption = "Sample" & i             '項目名
        End With
        
        Leftpoint = Leftpoint + 120
    
    Next i
    
    .Show vbModeless

End With

End Sub

フレーム内にコントロールを追加するサンプルコード

追加したフレーム内にオプションボタンを3つ追加するサンプルコードです。

フレーム内にコントロールを追加する場合は、フレームまでオブジェクトを指定して追加します。

Sub Sample4()

Dim MyCtrl As Object
Dim i      As Long

With UserForm1

    Set MyCtrl = .Controls.Add("Forms.Frame.1", "MyFrame", True)
    
    With MyCtrl
        .Top = 24                           'Top位置
        .Left = 18                          'Left位置
        .Height = 100                       '高さ
        .Width = 120                        '幅
        .ForeColor = RGB(255, 0, 0)         '文字色
        .Font.Name = "メイリオ"             'Captionのスタイル
        .TabIndex = 1
        .Caption = "Sample1"                '項目名
        
        For i = 1 To 3
    
            'オプションボタンの名前に番号を付ける
            Set MyCtrl = .Controls.Add("Forms.OptionButton.1", "MyOption" & i, True)
            
            With MyCtrl
                .Top = 20 * i                       'Top位置
                .Left = 10                          'Left位置
                .Height = 20                        '高さ
                .Width = 100                        '幅
                .ForeColor = RGB(0, 0, 0)           '文字色
                .Font.Name = "メイリオ"             'テキストのスタイル
                .FontSize = 10                      'テキストのサイズ
                .TabIndex = i                       'タブキーの移動の順番を指定する
                .Caption = "Sample" & i             '項目名
            End With
    
        Next i
        
    End With
    
    .Show vbModeless

End With

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