web-dev-qa-db-ja.com

VBAを使用してExcelユーザーフォームのフレームにコントロールを追加する

ラベルとボタンを動的に作成し、ユーザーフォーム内のフレームに追加する必要があります。どうすればよいですか?それのように見えるすべきそれは実際よりも簡単です。

13
notnot

次のコードは、ユーザーフォームのフレームにコントロールを動的に入力する方法を示しています...

私が使用したフォームでは、Frame1という名前のフレームコントロールがあったので、UserForm_InitializeでFrame1.Controls.Addを呼び出して、フレームにコントロールを埋め込みます。ユーザーフォームのコードモジュールで定義したWithEventsコントロール変数に返されるコントロールを設定できるので、必要なコントロールのイベントに応答できます...

したがって、このメソッドでは、作成するコントロールに必要なイベントコードを事前に記述する必要があります...

また、上、左、幅、高さのプロパティが必ずしもインテリセンスで表示されなくても、コントロールの位置とサイズを変更できることに注意してください...

Private WithEvents Cmd As MSForms.CommandButton
Private WithEvents Lbl As MSForms.Label

Private Sub UserForm_Initialize()
    Set Lbl = Frame1.Controls.Add("Forms.Label.1", "lbl1")
    Lbl.Caption = "Foo"
    Set Cmd = Frame1.Controls.Add("Forms.CommandButton.1", "cmd1")
End Sub

Private Sub Cmd_Click()
    Cmd.Top = Cmd.Top + 5
End Sub

Private Sub Lbl_Click()
    Lbl.Top = Lbl.Top + 5
End Sub
19
Jon Fournier

上記のテーマの私のバリエーション。ただし、これはボタンの4x4配列用です。ユーザーフォームを作成し、コードに追加します。同じ概念をラベルで使用できます(または前の回答を参照してください)。

Private cmdLots(20) As MSForms.CommandButton

Private Sub UserForm_Initialize()
For i = 1 To 4
For j = 1 To 4
    k = i + (4 * j)
    Set cmdLots(k) = UserForm2.Controls.Add("Forms.CommandButton.1", "cmd1")
    With cmdLots(k)
        .Top = i * 25
        .Left = (j * 80) - 50
        .BackColor = RGB(50 * i, 50 * j, 0)
        .Caption = "i= " & i & "  j= " & j
    End With
Next j
Next i
End Sub
4
tjSTAR