トップ > 逆引きで学ぶ ユーザーフォーム&コントロール > 追加章 遊ぶ!楽しむ!ユーザーフォーム > デザインモードのフォームコントロールをコードから操作する

デザインモードのフォームコントロールをコードから操作する2022.05.03

次の書籍の第1章~5章を公開しています。
「Excel VBA 逆引きで学ぶ ユーザーフォーム&コントロール」

ユーザーフォームの開発は、通常デザインモードで行います。
このモードでは、フォームやコントロールの大きさや位置等を視覚的に確認できます。
そしてコントロールをまとめて選択し、プロパティを一括で設定するといったことも容易に行えます。


しかし、コントロールのオブジェクト名を変更するといった、コントロール毎に異なるプロパティを設定するには手間がかかります。
そのような場合は、コードからコントロールのプロパティを設定する方法がお薦めです。


準備

デザインモードのユーザーフォームをコードから操作するには、事前の設定が必要です。

■VBA プロジェクト オブジェクト モデルへのアクセスを信頼する
「開発」タブの「マクロのセキュリティー」コマンドをクリックすると、「セキュリティーセンター」ウィンドウが表示されます。

ウィンドウ内の「開発者向けマクロ設定」項目の
「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」のチェックボックスにチェックを入れ、「OK」を押します。


これで設定は完了です。


サンプルコード

標準モジュールに記述します。

■ユーザーフォームを追加する

Sub Add_Form()
    ActiveWorkbook.VBProject.VBComponents.Add vbext_ct_MSForm
End Sub

■ユーザーフォームを追加し そのフォームにコマンドボタンを100個追加する

Sub Add_CommandButton100()
    Dim i As Long
    With ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
        With .Designer 'デザインモード
            For i = 1 To 100
                .Controls.Add "Forms.CommandButton.1" '参照:ProgID:
            Next
        End With
    End With
End Sub

Controls.Addメソッドで追加するコントロールのProgIDは次をご参照ください。
Addメソッド(Microsoft Forms)| Microsoft Docs

追加されたコントロールのオブジェクト名は「CommandButton2」のようにコントロールのタイプ+連番で自動設定されます。


■既存のユーザーフォームにLabelを100個追加しCaptionプロパティを設定する

Sub Add_Label100()
    Dim i As Long
    With ActiveWorkbook.VBProject.VBComponents.Item("UserForm1")
        With .Designer
            For i = 1 To 100
                With .Controls.Add("Forms.Label.1")
                    .Caption = i 'Captionプロパティにiの値を設定
                End With
            Next
        End With
    End With
End Sub

コード中の"UserForm1"の部分が、既存のユーザーフォームのオブジェクト名になります。オブジェクト名に応じて変更してください。


■既存の100個のLabelコントロールにプロパティを設定する

Sub Set_Property()
    '既存の「UserForm1」上にLabelコントロールが100個あることが前提です
    'Labelのオブジェクト名はLabel1~Label100とします
    Dim i       As Long
    Dim j       As Long
    Dim objForm As Object
    Set objForm = ActiveWorkbook.VBProject.VBComponents.Item("UserForm1")
    With objForm.Designer
        For i = 1 To 10
            For j = 1 To 10
                With .Controls("Label" & (i - 1) * 10 + j)
                    .Caption = ""                   '見出し:無
                    .Width = 18                     '幅:18
                    .Height = 18                    '高さ:18
                    .Left = (i - 1) * 18 + 18       '横位置
                    .Top = (j - 1) * 18 + 18        '縦位置
                    .BackColor = &HFFFFFF           '背景色:白
                    .BorderStyle = 1                '輪郭線:有
                    .Name = "FCells_" & i & "_" & j 'オブジェクト名
                End With
            Next
        Next
    End With
End Sub



書籍紹介140以上のサンプルファイル付き!

知りたいがすぐわかる! やりたいがすぐできる!
「Excel VBA 逆引きで学ぶ ユーザーフォーム&コントロール」(Kindle版)
ユーザーフォームを扱えると、VBAでできることが大きく広がります!
本書では、知りたいこと、やりたいことから、逆引きで学びを深められます。

■ 購入:amazon

ページトップへ戻る
Copyright(C) 2009- 坂江 保 All Rights Reserved.