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