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 つのユーザーフォームにこのタイプのコードがあります。それは非常に多くのテキストスペースを占有し、無駄に思えます。これを行うより良い方法はありますか?

クラスモジュールを書いたことがないことを知っておいてください。したがって、ソリューションがそれを必要とする場合、私はそれに慣れる必要があります。

ありがとう、

エリアス

4

3 に答える 3

3

また、次を使用してアイテムを入力できますList

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

この配列 (Variant) を 1 回定義できます。

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 に答える