【问题标题】:ComboBox list throgh Range in sheet组合框列表通过工作表中的范围
【发布时间】:2019-01-11 16:45:31
【问题描述】:

在用户窗体中,我插入了 ComboBox,我必须通过 Array 添加列表以下是代码。我想知道 ComboBox 列表中是否有可能从工作表中的范围获取(例如在数据验证的情况下)

Private Sub UserForm_Initialize()

    ComboBox1.List = Array("Item1", "Item2", "Item3", "Item4")

End Sub

【问题讨论】:

    标签: excel vba excel-2010


    【解决方案1】:

    您可以使用工作表中的范围来创建,甚至是命名范围,例如:

    combobox1.list = range(cells(1,1),cells(100,1)).value
    
    combobox2.list = sheets(1).range("NamedRange")
    
    arr = array("1","2","3")
    combobox3.list = arr
    

    【讨论】:

      【解决方案2】:

      这就是您如何使用范围来设置组合框的行源。您也可以在 vba 中执行此操作。

      Me.combobox1.RowSource = "MyRange"
      

      【讨论】:

      • 感谢@Doug Coats
      • 随时。请记住将帮助您回答问题的答案标记为已回答。
      • 当我看到这个答案时,我的第一反应是“为什么不把列表放在一个表中并指向那个表?”。所以我试了一下。我第一次运行表单时,它就像一个魅力。然后我在表中添加了几个值,再次运行表单并导致 Excel 崩溃。我能够重复两次,所以我认为我可能在 Excel 中发现了另一个错误。
      【解决方案3】:

      您可以将其设置为表 (ListObject) 而不是静态范围。使用您的值列表创建一个表格,而不仅仅是使用静态单元格范围。这样,当您需要添加到列表中时,您只需输入新值,这些值将添加到表中。在我的示例中,我有一个名为“Table1”的表和一个标题为“Numbers”的列。然后调用这个函数:

      Private Sub UserForm_Initialize()
          ComboBox1.RowSource = "=Table1[Numbers]"
      End Sub
      

      您必须在 Iniitalize 上执行此操作,因为从 ComboBox 属性设置 RowSource 将导致 Excel 在您首次将项目添加到列表时崩溃。

      这为您提供了一个列表,您无需编辑用户窗体后面的代码即可对其进行编辑。

      【讨论】:

        猜你喜欢
        • 2019-09-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-06
        • 2023-01-12
        • 2019-12-24
        • 2013-02-26
        相关资源
        最近更新 更多