【问题标题】:VB Is it possible to use a loop to control multiple form controls?VB是否可以使用循环来控制多个表单控件?
【发布时间】:2015-12-09 21:23:17
【问题描述】:

我在 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 个组合框时变得特别烦人。

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

【问题讨论】:

标签: forms excel loops excel-2010 vba


【解决方案1】:

是的。

确保每个组合框的名称相同,但每个组合框的末尾都有一个对应的整数。例如,组合框应命名为 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

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

【讨论】:

  • 谢谢你,谢天谢地,我已经按照你提到的方式命名了我的控件。我尝试过类似的东西,但基本上没有 Me.Controls,但这显然不起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-29
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多