将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中:)