0

有没有更有效的方法来编写这个用户表单代码?

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”块。现在,我在四个类似构造的用户表单中都有这种类型的代码。它占用了这么多的文本空间,看起来很浪费。有一个更好的方法吗?

请知道我从未编写过类模块。因此,如果解决方案需要它,我将需要接受它。

谢谢,

埃利亚斯

4

3 回答 3

5

用子例程划分你的代码:)

假设您的下拉列表是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
于 2013-07-16T21:41:35.617 回答
3

此外,您可以使用以下方式填充项目List

Private Sub UserForm_Initialize()
    Me.ComboBox1.List = Array("Monday", "Tuesday", "Wednesday")
End Sub

您可以定义此数组(变体)一次:

Private days As Variant

Private Sub UserForm_Initialize()
    days = Array("Monday", "Tuesday", "Wednesday")
    Me.ComboBox1.List = days

End Sub

我还将利用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
于 2013-07-16T22:13:37.687 回答
1

研究设置一个子程序来填充它。更多信息在这里...

http://www.vbforums.com/showthread.php?607511-RESOLVED-Excel-VBA-How-to-add-the-same-items-to-multiple-combo-boxes

于 2013-07-16T21:41:35.020 回答