使用VBA,我试图构建这个复杂的表单来向现有表添加新行。 我想要这个ComboBox将列出表格列中已存在的值。使用VBA,如何在excel表中基于特定的comlumn填充ComboBox值
我是VBA的新手。我尝试了一些范围/选择和排序组合,目前并不缺乏...
使用VBA,我试图构建这个复杂的表单来向现有表添加新行。 我想要这个ComboBox将列出表格列中已存在的值。使用VBA,如何在excel表中基于特定的comlumn填充ComboBox值
我是VBA的新手。我尝试了一些范围/选择和排序组合,目前并不缺乏...
这是你要找的东西..它应该让你开始,只需调整表和范围以满足您的需求。
Dim cmb as ComboBox
Dim rng as Range
Set cmb = Worksheets("Sheet1").ComboBox1
'To fill based on range
For Each rng in Worksheets("Sheet2").Range("C2:C300")
Cmb.AddItem Rng.Value
Next
'To fill from table where ListColumns(N) is the specific column
Set rng = Sheet2.ListObject(1).ListColumns(3).Range
For Each rng in rng
Cmb.AddItem Rng.Value
Next
Cmb.ListIndex = 0
* 编辑: *克里斯是正确的,我原来的代码有错误。在上班途中发布的答案没有时间检查。上面的代码工作正常。克里斯建议只使用.value来填充更快。我真的不知道你可以这样做。
您需要创建表列范围,
要么你可以将你排在侧
的范围内,或者您需要先添加行表和调整你的范围
和传递范围传球给SetRng参数,
userFormName是用户名的形式,
控件名称是组合框名
Public Function FillRangeComboBox(userFormName As String, ControlName As String, SetRng As Range) As Boolean
Dim ObjFormName As Object: Set ObjFormName = ThisWorkbook.VBProject.VBComponents(userFormName)
Dim ObjControlName As MSForms.ComboBox: Set ObjControlName = ObjFormName.Designer.Controls(ControlName)
''set combobox value
With ObjControlName
.RowSource = SetRng.Address
End With
End Function
-1草率代码,不编译:正确的参考表中的数据是'工作表(“Sheet 2中”)ListObjects(1 ).ListColumns(3)。数据BodyRange'。假设组合框是表单上的* ActiveX *组合(可能是真的,但需要说明)。循环是不必要的,使用'cmb.List = Worksheets(“Sheet2”)。ListObjects(1).ListColumns(3).DataBodyRange.Value'来代替。如果确实使用AddItem,则应在加载数据之前使用cmb.Clear,以删除组合中的任何现有数据。 –