2011-10-10 90 views

回答

2

这是你要找的东西..它应该让你开始,只需调整表和范围以满足您的需求。

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来填充更快。我真的不知道你可以这样做。

+1

-1草率代码,不编译:正确的参考表中的数据是'工作表(“Sheet 2中”)ListObjects(1 ).ListColumns(3)。数据BodyRange'。假设组合框是表单上的* ActiveX *组合(可能是真的,但需要说明)。循环是不必要的,使用'cmb.List = Worksheets(“Sheet2”)。ListObjects(1).ListColumns(3).DataBodyRange.Value'来代替。如果确实使用AddItem,则应在加载数据之前使用cmb.Clear,以删除组合中的任何现有数据。 –

0

您需要创建表列范围,
要么你可以将你排在侧
的范围内,或者您需要先添加行表和调整你的范围
和传递范围传球给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  
相关问题