デザインモードのフォームコントロールをコードから操作する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