我正在尝试为用户窗体中的一系列3个组合框控件制作VBA更新行源例程。三个组合框都位于一个名为"frm1"的框架中组合框的行源是工作表中三个独立的列。工作表被命名为"选项",包含行源的三列中的每一列的顶部单元格都与引用它的组合框同名。其想法是,我可以在任何组合框的行源中写入额外的行(只需将其键入工作表的右列),然后运行例程,从而自动扩展所讨论的组合框的列源选择。
然而,运行脚本(通过从UserForm_Activate()例程调用它)会给我"运行时错误‘13’:类型不匹配"
你们中有谁能帮我吗?
Private Sub UpdateCB()
Dim j As Control
Dim i As Integer
For Each j In frm1.Controls
i = 1
Do Until ThisWorkbook.Sheets("options").Range(j.Name).Offset(i, 0).Value = ""
i = i + 1
Loop
j.RowSource = ThisWorkbook.Sheets("options").Range(j.Name).Resize(i)
Next j
End Sub
ComboBox.rowsource
需要range.address
,而不是range.value
或您现在拥有的范围引用。因此,以这种方式在问题行的末尾添加.address property
:
j.RowSource = ThisWorkbook.Sheets("options").Range(j.Name).Resize(i).address
如果您使用.tag属性来存储列号:
Private Sub Userform_initialize()
with thisworkbook.sheets("options")
combobox1.list=.columns(val(combobox1.tag)).specialcells(2).value
combobox2.list=.columns(val(combobox2.tag)).specialcells(2).value
combobox3.list=.columns(val(combobox3.tag)).specialcells(2).value
end with
end sub