EXCEL VBA:用户表单代码,重复代码改进
有没有更有效的方式来编写这个用户表单代码?
Private Sub Userform_Initialize() 'do stuff With Item1_DropDown .AddItem "Monday" .AddItem "Tuesday" .AddItem "Wednesday" End With With Item2_DropDown .AddItem "Monday" .AddItem "Tuesday" .AddItem "Wednesday" End With With Item3_DropDown .AddItem "Monday" .AddItem "Tuesday" .AddItem "Wednesday" End With 'and so on, and so on. (I have about fifty of these 'With/End With' blocks) End Sub
基本上,我希望能够停止写这么多的“With / End With”块。 现在,我在我的四个类似构造的用户forms中有这种types的代码。 它占用了太多的文本空间,这似乎是一种浪费。 有一个更好的方法吗?
请知道我从来没有写过类模块。 所以,如果解决scheme需要它,我将需要对它进行审慎考虑。
谢谢,
埃利亚斯
使用子程序划分你的代码:)
假设您的下拉列表是ComboBox
表单控件:
Private Sub Userform_Initialize() PopulateDropDown Item1_DropDown PopulateDropDown Item2_DropDown PopulateDropDown Item3_DropDown End Sub Sub PopulateDropDown(cb as MSForms.ComboBox) With cb .AddItem "Monday" .AddItem "Tuesday" .AddItem "Wednesday" End With End Sub
此外,您可以使用List
填充项目:
Private Sub UserForm_Initialize() Me.ComboBox1.List = Array("Monday", "Tuesday", "Wednesday") End Sub
你可以定义这个数组(Variant)一次:
Private days As Variant Private Sub UserForm_Initialize() days = Array("Monday", "Tuesday", "Wednesday") Me.ComboBox1.List = days End Sub
我还会利用(每个combobox的) Tag
属性来区分那些需要用这些值填充的东西:
Private days As Variant Private Sub UserForm_Initialize() Dim ctl As Control days = Array("Monday", "Tuesday", "Wednesday") For Each ctl In Me.Controls If TypeOf ctl Is ComboBox And ctl.Tag = "days" Then ctl.List = days End If Next ctl End Sub