VBA excel:通过调整范围来更新用于组合框控件的rowsource

时间:2015-03-05 09:32:25

标签: excel-vba combobox resize range vba

我正在尝试为用户表单中的一系列3个组合框控件创建一个VBA更新行源例程。 这三个组合框都位于一个名为" frm1" 组合框的行源是工作表中的三个单独的列。 工作表名为" options"并且持有行源的三个列中的每个列中的顶部单元格与引用它的组合框具有相同的名称。 我的想法是,我可以在rowsource中为任何组合框写入额外的行(只需将其键入工作表的右列),然后运行例程,从而自动扩展有问题的组合框的行源选择。 / p>

然而,运行脚本(通过从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

2 个答案:

答案 0 :(得分:1)

ComboBox.rowsource期待range.address不是range.value或您现在拥有的范围参考。因此,以这种方式在问题行的末尾添加.address property

j.RowSource = ThisWorkbook.Sheets("options").Range(j.Name).Resize(i).address

答案 1 :(得分:0)

如果使用.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