【问题标题】:Populating combobox from named ranges从命名范围填充组合框
【发布时间】:2016-07-25 14:23:42
【问题描述】:

我使用 excel 的验证公式创建了三个相关的下拉列表。 这样做的好处是可以轻松添加更多选项,并且下拉列表会自动更新。其结构如下所示(其中每个范围的名称与列标题相同)。

是否可以使用组合框创建相同的效果。我可以找到手动填充组合框但不能从命名范围自动填充的示例

【问题讨论】:

  • 您是在工作表还是用户窗体上使用列表框?如果在工作表上,它们是表单控件还是 ActiveX 控件?
  • 我打算使用表单控件在工作表上进行操作,但没有具体理由选择其中一个。我目前拥有的下拉列表纯粹是带有数据验证公式的单元格
  • 在这两种情况下,您都必须使用 VBA 来正确填充组合框,这只是您要使用哪个组合框的问题。如果您只想使用命名范围来执行此操作,那么数据验证是可行的方法,我认为没有理由改变您现在正在做的事情。
  • 那么是否不可能以相同的数据验证方式填充组合框?好处是您可以在单击选项时执行操作,而这对于数据验证来说并不那么顺利
  • 很有可能以相同的方式填充组合框,它只需要 VBA 来进行更改事件。对于表单控件,右键单击它并分配一个宏,然后单击新建,让它为更改事件创建一个子例程。对于 ActiveX 控件,在设计模式下,右键单击组合框并选择查看代码,让它为其更改事件创建一个子例程。然后在更改事件中编写任何您想要的代码(例如根据所选值填充其他组合框以模仿相关下拉列表)

标签: excel vba combobox


【解决方案1】:

这里有一些你可以练习的东西。

创建组合框1

使用 worksheet_selection Change 事件填充,标题范围命名为“Headers”

标题下方的范围根据标题名称命名。

填充组合框2

更改组合框1 以填充组合框2

代码

进入工作表模块。

Private Sub ComboBox1_Change()
    Dim s As String
    s = ComboBox1
    Me.ComboBox2.List = Range(s).Value
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ComboBox1.List = Application.WorksheetFunction.Transpose(Range("Headers"))
End Sub

【讨论】:

    【解决方案2】:

    我知道这是一篇旧帖子,但我通过反复试验发现了这一点,并想与大家分享。

    当您创建一个命名范围并希望在您的组合框中使用该信息时,我在这里有一个简单的解决方案。

    例如,在您的情况下,namedrange 被称为“标题” 然后执行以下操作

    Me.combobox1.RowSource = "Headers"
    

    我不知道为什么,但它从命名范围添加信息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      相关资源
      最近更新 更多