使用VBA将控件添加到Excel用户窗体中的框架

我需要dynamic创build标签和button,然后将它们添加到用户窗体中的一个框架。 我该怎么做呢? 看起来应该比实际更容易。

以下代码演示了如何使用控件dynamic地填充用户窗体中的框架…

在我使用的forms中,我有一个名为Frame1的框架控件,所以在UserForm_Initialize中调用Frame1.Controls.Add来在框架中embedded一个控件。 您可以设置返回到您在UserForm代码模块中定义的WithEvents控件variables的控件,以便您可以响应您想要的任何控件的事件…

所以使用这种方法,您需要预先编写您想要创build的任何控件的事件代码…

还要注意,即使顶部,左侧,宽度和高度属性不一定出现在智能感知中,您也可以定位和调整控件大小。

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的buttonarrays。 创build一个用户表单,并将其添加到其代码。 您的标签可以使用相同的概念(或参阅上一个答案):

 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