質問

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

役に立ちましたか?

解決

次のコードは、あなたが動的にコントロールをユーザーフォーム内のフレームを移入する方法を示して...

私はあなたがフレーム内のコントロールを埋め込むFrame1.Controls.Addを呼び出しUserForm_Initializeにおけるので、私は、フレーム1という名前のフレームコントロールを持っていた使用形態においては。あなたが欲しいものは何でもコントロール上のイベントに応答できるように、ユーザーフォームのコードモジュールで定義されている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

他のヒント

上記のテーマに私のバリエーション。これは、しかし、単にボタンの4×4アレイのためです。ユーザーフォームを作成し、そのコードにこれを追加します。同じ概念はあなたのラベルで使用(または前の回答を参照)することができます:

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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top