将combobox的行源定义为从A2开始的列A中的值
这是我到目前为止所尝试的,
Private Sub UserForm_Initialize() Dim WBK As Workbook Set WBK = ActiveWorkbook WBK.Sheets("MFG_DATA").Range("A2", Range("A" & Rows.Count).End(xlUp)).Name = "Manufacturer" Me.MFGBOX.RowSource = "Manufacturer" End Sub
我得到一个错误1004,所以我没有正确定义我的对象?
WBK.Sheets("MFG_DATA").Range("A2", Range("A" & Rows.Count).End(xlUp)).Name = "Manufacturer"
这里Range("A" & Rows.Count).End(xlUp)
不符合工作表对象,所以会引用活动工作表。 如果这不是“MFG_DATA”,那么你会得到一个错误。
更好地使用:
With WBK.Sheets("MFG_DATA") .Range("A2", .Range("A" & Rows.Count).End(xlUp)).Name = "Manufacturer" End with
我通常做的是使用.AddItem方法来填充combobox。
Private Sub UserForm_Initialize() Dim WBK As Workbook Dim n as Integer Dim item() as String Set WBK = ActiveWorkbook n = WBK.Sheets("MFG_DATA").Range("A" & WBK.Sheets("MFG_DATA").Range("A" & Rows.Count).End(xlUp)).Row For i = 1 To n With Me.MFGBOX .AddItem item(i) End With Next i End Sub
或者如果你想使用命名的范围
Private Sub UserForm_Initialize() Dim cRng as Range Dim cLoc As Range Dim ws As Worksheet Dim n as Integer Set ws = Worksheets("MFG_DATA") n = ws.Range("A" & ws.Range("A" & Rows.Count).End(xlUp)).Row Set cRng = ws.Range("A2:A" & n) ActiveWorkbook.Names.Add Name:="Manufacturer", RefersTo:=cRng For Each cLoc In ws.Range("Manufacturer") 'or For Each cLoc In cRng With Me.MFGBOX .AddItem cLoc.Value End With Next cLoc End Sub
而不是macros,你可以使用命名的范围,只需创build一个表在A列中添加combobox值从A2..An然后它将进入表范围。
然后将命名范围定义为Combovalue ,并将范围指定为= Table1 [Headername] ,即使在表中添加新的combobox值,也会自动更新。
现在在combobox属性中给出RowSource proerty Combovalue中命名的范围名称,现在运行窗体的命名范围值将显示在combobox中:)