使用RowSource属性在Excel VBA中填充ComboBox

时间:2018-01-14 01:32:59

标签: excel vba combobox

我正在尝试使用等于数据表第一列的选项填充ComboBox,并继续

  

运行时错误380

我想我可以使用循环和AddItem语句,但由于我希望它变大(数百个条目),所以宁愿远离可能减慢执行速度的循环。对我做错了什么的想法?

Private Sub ClientNameComboxAdd_Enter()
Dim sht As Worksheet
Dim LastRow As Long, UseRow As Long
Dim NameFind As Range
Set sht = ThisWorkbook.Worksheets("Client Info")
LastRow = sht.ListObjects("Clients").Range.Rows.Count
If LastRow = 2 And sht.ListObjects("Clients").DataBodyRange(1, 1) = "" Then
    MsgBox "Can't Add a New Plan With No Clients Entered"
    Exit Sub
End If
ClientNameComboxAdd.RowSource = sht.ListObjects("Clients").ListColumns(1).DataBodyRange
End Sub

问题出现在倒数第二行 - ClientNameComboxAdd.RowSource ...第一部分,在客户端添加到表之前发挥作用,似乎工作正常。

任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:1)

我是这样做的。根本没有VBA代码。只需Excel 100%。

首先,我创建了一个名为“T_DATA”的表,其中包含2列COUNTRY和CONTINENT,之后我添加了3条记录:

    Country         Continent
United States        America
Spain                 Europa
Germany               Europa

之后,我创建了一个名为RANGECOMBOBOX的Range,source是我表的Country列。检查图片:

enter image description here

您必须确保此命名范围引用表的列。在我的情况下只是“= T_DATA [国家]”。

之后,我插入组合框并右键单击它,选项卡CONTROL,然后我将Entry Range设置为我之前创建的命名范围,在我的例子中,RANGECOMBOBOX:

enter image description here

第三步是测试组合框是否获得Country Column的值,它确实:

enter image description here

现在进行最后的测试,我在表格中插入了2条新记录(中国和日本的价值),并且只需在我的桌子上添加记录即可立即更新组合框。

enter image description here

希望这可以帮助您完成任务。你有另外一个选择,我做了同样的事情,但首先激活宏录制器并检查代码。也许它可以帮助你解决问题。

更新的答案:

然后尝试

Private Sub UserForm_Initialize()
Me.ClientNameComboxAdd.RowSource = "RangeCombobox"
End Sub

这适用于我的userform,并且组合框装载了各个国家/地区。但是,每次在表中插入新记录时,请记得卸载并重新加载表单,以更新组合框