【问题标题】:why does my combobox not have any values?为什么我的组合框没有任何值?
【发布时间】:2021-04-08 12:07:09
【问题描述】:

我通过 ui 制作了一个组合框,然后双击它以转到其 VBA 代码。 然后我插入了这段代码。 我想从工作表 5 中名为“产品”的列 D 中取出单词并将其插入组合框中。

Private Sub ComboBox1_Change()
Dim c As Range
ComboBox1.Clear
With Worksheets(5)
    For Each c In .Range(.Range("D5"), .Range("D" & .Rows.Count).End(xlUp))
        If c.Value <> vbNullString Then ComboBox1.AddItem c.Value
    Next c
End With
End Sub

当我这样做时,不会发生。组合框只是空的。

更新: 试试这个,它不起作用。

Private Sub ComboBox1_Change()

End Sub



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim c As Range
With Worksheets(5)
    For Each c In .Range(.Range("D5"), .Range("D" & .Rows.Count).End(xlUp))
        If c.Value <> vbNullString Then ComboBox1.AddItem c.Value
    Next c
End With
End Sub

【问题讨论】:

  • 你为什么要从组合框更改事件中这样做?它只会不断触发自身并清除所有条目。
  • 您确定您的意思是vbscript 而不是VBA

标签: excel vba combobox


【解决方案1】:

双击表单的空白区域并将代码放在那里。 它不起作用的原因是您在访问列表时正在填充列表。您应该在显示列表之前填充它。

【讨论】:

  • 您的第二段代码对我有用(尽管您可能想在Dim c As Range 之后添加ComboBox1.Clear)。 Worksheets(5) 存在吗?
  • 在您更新的代码中,您忘记复制ComboBox1.Clear 行,正如@CMArg 所提到的。另外,我不会使用Worksheet_SelectionChange,而是使用`Worksheet_Change'。这样,您就不会在每次在工作表中移动时都刷新列表。
  • 还有一件事。在我的回复中,我假设您正在使用 UserForms。还是您将其插入工作表中?如果您要将其插入工作表中,请确保您使用的是 ActiveX 控件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
相关资源
最近更新 更多