我正在尝试使用等于数据表第一列的选项填充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 ...第一部分,在客户端添加到表之前发挥作用,似乎工作正常。
任何想法都会受到赞赏。
答案 0 :(得分:1)
首先,我创建了一个名为“T_DATA”的表,其中包含2列COUNTRY和CONTINENT,之后我添加了3条记录:
Country Continent
United States America
Spain Europa
Germany Europa
之后,我创建了一个名为RANGECOMBOBOX的Range,source是我表的Country列。检查图片:
您必须确保此命名范围引用表的列。在我的情况下只是“= T_DATA [国家]”。
之后,我插入组合框并右键单击它,选项卡CONTROL,然后我将Entry Range设置为我之前创建的命名范围,在我的例子中,RANGECOMBOBOX:
第三步是测试组合框是否获得Country Column的值,它确实:
现在进行最后的测试,我在表格中插入了2条新记录(中国和日本的价值),并且只需在我的桌子上添加记录即可立即更新组合框。
希望这可以帮助您完成任务。你有另外一个选择,我做了同样的事情,但首先激活宏录制器并检查代码。也许它可以帮助你解决问题。
更新的答案:
然后尝试
Private Sub UserForm_Initialize()
Me.ClientNameComboxAdd.RowSource = "RangeCombobox"
End Sub
这适用于我的userform,并且组合框装载了各个国家/地区。但是,每次在表中插入新记录时,请记得卸载并重新加载表单,以更新组合框