我是參考網路的作法… Private Sub C7User_SigLinkage_Click() Dim wantTable(1) As String
wantTable(0) = "REGEN_A1_CRC7USER" wantTable(1) = "DISP_DISPSPLNKREM" Call Module11.AddForm_01("DISP_C7user_Splnkrem", wantTable) End Sub 我將UserForm的動態新增放在一個Module內方便不同的Sub 呼叫…如下: Sub AddForm_01(FormName As String, getTable As Variant)
Dim myForm1 Dim myMultiPage1 As msforms.MultiPage Dim myLabel1 As msforms.Label Dim myListBox1 As msforms.ListBox Dim myCheckBox1 As msforms.CheckBox Dim i%
Application.VBE.MainWindow.Visible = False '動態新增UserForm Set myForm1 = ActiveWorkbook.VBProject.VBComponents.Add(3) '設置該Form的名稱、高度、寬度、位置等 With myForm1 .Properties("Caption") = FormName .Properties("Name") = FormName .Properties("Width") = 459 .Properties("Height") = 343 .Properties("Left") = 160 .Properties("Top") = 150 End With '動態新增MultiPage控件 Set myMultiPage1 = _ myForm1.Designer.Controls.Add("forms.MultiPage.1") '設置該MultiPage的名稱、高度、寬度、位置等 With myMultiPage1 .Left = 5 .Width = 445 .Height = 270 End With
'動態新增Label控件 Set myLabel1 = _ myForm1.Designer.Controls.Add("forms.Label.1") '設置該Label的名稱、高度、寬度、位置等 With myLabel1 .Font.Name = "Gungsuh" .Caption = "Table_List" .Width = 96 .Height = 18 .Left = 210 .Top = 48 .AutoSize = True End With '動態新增ListBox控件 Set myListBox1 = _ myMultiPage1.Pages(0).Controls.Add("forms.ListBox.1") '設置該ListBox的名稱、高度、寬度、位置等 With myListBox1 .Width = 194 .Height = 100 .Left = 210 .Top = 66 End With
For i = 0 To UBound(getTable) '動態新增CheckBox控件 Set myCheckBox1 = _ myMultiPage1.Pages(0).Controls.Add("forms.CheckBox.1") '設置該CheckBox的名稱、高度、寬度、位置等 With myCheckBox1 .Name = getTable(i) .Caption = getTable(i) .Font.Name = "Dotum" .Font.Size = 10 .AutoSize = True .Width = 140 .Height = 17.5 .Left = 24 .Top = 6 + i * 20 End With
Next i '顯示窗體 VBA.UserForms.Add(myForm1.Name).Show '關閉後移除窗體 ActiveWorkbook.VBProject.VBComponents.Remove VBComponent:=myForm1
Set myListBox1 = Nothing Set myLabel1 = Nothing Set myForm1 = Nothing End Sub