見出し画像

VBA|VBE自動化|VBComponents.Add(vbext_ct_MSForm)|UserFormを作成する


■ 基本構文

(疑似構文)

Set ufComp = VBProject.VBComponents.Add({MSForm})
ufComp.Name = {フォーム名}
ufComp.Designer.Controls.Add({ProgID})

(前提)
・「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」を有効化する
・UserForm作成はVBE構造を変更するため、実行前バックアップを推奨する

(戻り値の型・性質)
戻り値なし(UserForm新規作成・コントロール追加の副作用)


■ サンプルコード

サンプル①:UserFormを作成し、LabelとTextBoxを追加する
役割:フォームと基本コントロールをコードで生成する
理由:雛形作成を自動化し、項目追加をループで処理できる
注意:同名UserFormが既にある場合は Name でエラーになり得る

Option Explicit

Public Sub CreateUserForm_Basic()
    Const vbext_ct_MSForm As Long = 3
    
    Dim ufComp As Object
    Dim d As Object
    Dim lbl As Object, txt As Object
    
    Set ufComp = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm)
    ufComp.Name = "UserForm_Auto"
    
    Set d = ufComp.Designer
    
    Set lbl = d.Controls.Add("Forms.Label.1")
    lbl.Caption = "Name"
    lbl.Left = 12: lbl.Top = 12: lbl.Width = 48
    
    Set txt = d.Controls.Add("Forms.TextBox.1")
    txt.Left = 70: txt.Top = 10: txt.Width = 120
End Sub

■ 備考

・用語:UserForm|ユーザーフォーム / Designer|デザイナー
・ProgID例:Forms.Label.1 / Forms.TextBox.1

いいなと思ったら応援しよう!

Parusの寺小屋 技術メモや学習の整理として書いています。 もし内容が役に立ったり、続きを読みたいと思っていただけたら、 応援として受け取らせてもらえたら嬉しいです。