ラベルとボタンを動的に作成し、ユーザーフォーム内のフレームに追加する必要があります。どうすればいいですか?実際よりも簡単なはずです。
96313 次
3 に答える
22
次のコードは、ユーザーフォームのフレームにコントロールを動的に追加する方法を示しています...
私が使用したフォームには Frame1 という名前のフレーム コントロールがあったので、UserForm_Initialize で Frame1.Controls.Add を呼び出してフレームにコントロールを埋め込みます。UserFormコードモジュールで定義した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
于 2009-02-25T18:33:16.923 に答える
4
上記のテーマの私のバリエーション。ただし、これはボタンの 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
于 2010-08-06T10:15:53.783 に答える