使用vba在模块中编程创build表单

我想以编程方式使用VBA在模块中创build一个用户窗体。 我是一个新手,没有经验,所以我尝试了几个例子,但是他们没有达到我的要求。

我只是想macros

  • 使用VBA在模块内创build用户表单
  • 有一个ListBox与一些数据
  • 有一个监听器的CommandButton

这是我使用的代码

Option Explicit Sub MakeuserForm() 'Dim CommandButton1 As MsForms.CommandBarButton 'Dim ListBox1 As MsForms.ListBox Dim UserForm1 As VBComponent Set UserForm1 = ActiveWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm) With UserForm1 .Properties("Height") = 100 .Properties("Width") = 200 On Error Resume Next .Name = "My Form" .Properties("Caption") = "This is your user form" End With ShowForm End Sub Sub ShowForm() NewForm.Show End Sub 

现在我不知道如何将ListBox和button添加到具有侦听器的窗体。

辛勤工作后,我发现了一个非常简单的回答我的问题。 也可以帮助你。

 Sub CreateUserForm() Dim myForm As Object Dim NewFrame As MSForms.Frame Dim NewButton As MSForms.CommandButton 'Dim NewComboBox As MSForms.ComboBox Dim NewListBox As MSForms.ListBox 'Dim NewTextBox As MSForms.TextBox 'Dim NewLabel As MSForms.Label 'Dim NewOptionButton As MSForms.OptionButton 'Dim NewCheckBox As MSForms.CheckBox Dim X As Integer Dim Line As Integer 'This is to stop screen flashing while creating form Application.VBE.MainWindow.Visible = False Set myForm = ThisWorkbook.VBProject.VBComponents.Add(3) 'Create the User Form With myForm .Properties("Caption") = "New Form" .Properties("Width") = 300 .Properties("Height") = 270 End With 'Create ListBox Set NewListBox = myForm.designer.Controls.Add("Forms.listbox.1") With NewListBox .Name = "lst_1" .Top = 10 .Left = 10 .Width = 150 .Height = 230 .Font.Size = 8 .Font.Name = "Tahoma" .BorderStyle = fmBorderStyleOpaque .SpecialEffect = fmSpecialEffectSunken End With 'Create CommandButton Create Set NewButton = myForm.designer.Controls.Add("Forms.commandbutton.1") With NewButton .Name = "cmd_1" .Caption = "clickMe" .Accelerator = "M" .Top = 10 .Left = 200 .Width = 66 .Height = 20 .Font.Size = 8 .Font.Name = "Tahoma" .BackStyle = fmBackStyleOpaque End With 'add code for listBox lstBoxData = "Data 1,Data 2,Data 3,Data 4" myForm.codemodule.insertlines 1, "Private Sub UserForm_Initialize()" myForm.codemodule.insertlines 2, " me.lst_1.addItem ""Data 1"" " myForm.codemodule.insertlines 3, " me.lst_1.addItem ""Data 2"" " myForm.codemodule.insertlines 4, " me.lst_1.addItem ""Data 3"" " myForm.codemodule.insertlines 5, "End Sub" 'add code for Comand Button myForm.codemodule.insertlines 6, "Private Sub cmd_1_Click()" myForm.codemodule.insertlines 7, " If me.lst_1.text <>"""" Then" myForm.codemodule.insertlines 8, " msgbox (""You selected item: "" & me.lst_1.text )" myForm.codemodule.insertlines 9, " End If" myForm.codemodule.insertlines 10, "End Sub" 'Show the form VBA.UserForms.Add(myForm.Name).Show 'Delete the form (Optional) 'ThisWorkbook.VBProject.VBComponents.Remove myForm End Sub