使用 VBA 向 Excel 用户窗体中的框架添加控件
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/563972/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Adding controls to a frame in an Excel userform with VBA
提问by notnot
I need to create labels and buttons dynamically and then add them to a frame within a userform. How do I do this? Seems like it shouldbe easier than it really is.
我需要动态创建标签和按钮,然后将它们添加到用户窗体中的框架中。我该怎么做呢?看起来它应该比实际更容易。
回答by Jon Fournier
The following code demonstrates how you can dynamically populate a frame in a userform with controls...
以下代码演示了如何使用控件动态填充用户窗体中的框架...
In the form I used I had a frame control named Frame1, so in the UserForm_Initialize you call Frame1.Controls.Add to embed a control in the frame. You can set the control which gets returned to a WithEvents control variable that you have defined in the UserForm code module so you can respond to events on whatever controls you want...
在我使用的窗体中,我有一个名为 Frame1 的框架控件,因此在 UserForm_Initialize 中调用 Frame1.Controls.Add 将控件嵌入到框架中。您可以设置返回到您在 UserForm 代码模块中定义的 WithEvents 控件变量的控件,以便您可以响应您想要的任何控件上的事件...
So with this method you need to pre-write any event code you want for any controls you create...
因此,使用此方法,您需要为您创建的任何控件预先编写所需的任何事件代码...
Also note that you can position and size your controls even if the top, left, width, and height properties don't necessarily come up in intellisense...
另请注意,即使顶部、左侧、宽度和高度属性不一定出现在智能感知中,您也可以定位和调整控件的大小...
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
回答by tjSTAR
My variation on the theme above. This is just for a 4x4 array of buttons though. Create a userform and add this to its code. The same concepts can be used with your labels (or see the previous answer):
我对上述主题的变体。不过,这仅适用于 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

