Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 为什么我的组合框没有任何值?_Excel_Vba_Combobox - Fatal编程技术网

Excel 为什么我的组合框没有任何值?

Excel 为什么我的组合框没有任何值?,excel,vba,combobox,Excel,Vba,Combobox,我在ui中创建了一个组合框,然后双击它转到它的VBA代码。 然后我插入了这个代码。 我想从工作表5中名为“products”的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)

我在ui中创建了一个组合框,然后双击它转到它的VBA代码。 然后我插入了这个代码。 我想从工作表5中名为“products”的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子组合框1_Change()
调光范围
组合框1.清除
附工作表(5)
对于.Range(.Range(“D5”)、.Range(“D”和.Rows.Count).End(xlUp))中的每个c
如果c.值为vbNullString,则ComboBox1.AddItem c.值
下一个c
以
端接头
当我这样做的时候,什么都不会发生。组合框只是空的

更新: Trid这个,它不起作用

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
Private子组合框1_Change()
端接头
专用子工作表\u选择更改(ByVal目标作为范围)
调光范围
附工作表(5)
对于.Range(.Range(“D5”)、.Range(“D”和.Rows.Count).End(xlUp))中的每个c
如果c.值为vbNullString,则ComboBox1.AddItem c.值
下一个c
以
端接头

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

为什么要在组合框更改事件中这样做?它将不断触发自身并清除所有条目。您确定是指
vbscript
而不是
VBA
?我更新了代码您的第二段代码对我有效(尽管您可能希望在
Dim c As Range
之后添加
ComboBox1.Clear
)。
工作表(5)
是否存在?在更新的代码中,您忘记复制行
组合框1。清除
,如@CMArg所述。此外,我不会使用
工作表选择更改
,而是使用“工作表更改”。这样,您就不会每次在工作表中移动时都刷新列表。还有一件事。在我的回答中,我假设您正在使用UserForms。或者你要把它插入到工作表中?如果要将其插入工作表,请确保使用ActiveX控件。