VB是否可以使用循环来控制多个表单控件?

时间:2015-12-09 21:23:18

标签: forms excel-vba loops excel-2010 vba

我在Excel 2010中工作,它是VB编辑器。我有一个带有6个组合框的表单,当我初始化表单时,所有6个组合框都需要进行相同的操作。目前,我必须为各种组合框编写相同的代码行,如下所示。

Private Sub Form_Initialize()
    Dim Table As ListObject
    Set Table = ThisWorkBook.Worksheets("Sheet1").ListObjects("Table1")
    Dim Rows As Integer
    Rows = Table.ListRows.Count
    Dim i As Integer

    With Me.ComboBox_1
        .Clear
        .Value = Empty
        For i = 1 to Rows
            .AddItem Table.DataBodyRange(i, 1)
        Next i
    End With

    With Me.ComboBox_2
        .Clear
        .Value = Empty
        for i = 1 to Rows
            .AddItem Table.DataBodyRange(i, 1)
        Next i
     End With

    'This repeats for another 4 comboboxes (ComboBox_3, ComboBox_4,
    'ComboBox_5 and ComboBox_6)

 End Sub

一遍又一遍地编写相同的代码变得非常烦人,当我想改变组合框的过程并且还必须更新5个其他代码时变得特别烦人。

是否可以为每个组合框编写一个循环的代码?

1 个答案:

答案 0 :(得分:2)

是的。

确保每个组合框的名称相同,但每个组合的末尾都有一个相应的整数。例如,组合框应该命名为ComboBox1,ComboBox2,ComboBox3,ComboBox4,ComboBox5和ComboBox6。

Private Sub Form_Initialize()
    Dim Table As ListObject
    Set Table = ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1")
    Dim Rows As Integer
    Rows = Table.ListRows.Count
    Dim i As Integer
    Dim j As Integer

    For j = 1 To 6
        With Me.Controls("ComboBox" & j)
            .Clear
            .Value = Empty
            For i = 1 To Rows
                .AddItem Table.DataBodyRange(i, 1)
            Next i
        End With
    Next j

End Sub

这应该每次都有效,在创建用户表单等时非常有用。