VBA excel: 通过调整范围更新组合框控件的行源
VBA excel: update rowsource for combobox control by resizing range
我正在尝试为用户窗体中的一系列 3 个组合框控件创建 VBA 更新行源例程。
三个组合框都位于一个名为 "frm1" 的框架中
组合框的行源是工作表中的三个独立列。
工作表被命名为 "options" 并且 包含行源的三个列中每一列的顶部单元格被赋予与引用它的组合框相同的名称 。
我的想法是,我可以在任何组合框的行源中写入额外的行(只需将其键入工作表的右列),然后 运行 例程,从而自动扩展组合框的行源选择有问题。
但是,运行 脚本(通过从 UserForm_Activate() 例程调用它)给了我 "runtime-error '13': Type mismatch"
你们谁能帮帮我吗?
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
我正在尝试为用户窗体中的一系列 3 个组合框控件创建 VBA 更新行源例程。 三个组合框都位于一个名为 "frm1" 的框架中 组合框的行源是工作表中的三个独立列。 工作表被命名为 "options" 并且 包含行源的三个列中每一列的顶部单元格被赋予与引用它的组合框相同的名称 。 我的想法是,我可以在任何组合框的行源中写入额外的行(只需将其键入工作表的右列),然后 运行 例程,从而自动扩展组合框的行源选择有问题。
但是,运行 脚本(通过从 UserForm_Activate() 例程调用它)给了我 "runtime-error '13': Type mismatch"
你们谁能帮帮我吗?
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