【问题标题】:VBA excel: update rowsource for combobox control by resizing rangeVBA excel:通过调整范围来更新组合框控件的行源
【发布时间】:2015-05-06 14:46:38
【问题描述】:

我正在尝试为用户窗体中的一系列 3 个组合框控件制作 VBA 更新行源例程。 这三个组合框都位于名为“frm1”的框架中 组合框的行源是工作表中的三个单独的列。 工作表被命名为“选项”,保存行源的三列中每一列的顶部单元格与引用它的组合框名称相同。 这个想法是我可以在任何组合框的行源中写入额外的行(只需将其键入工作表的右列),然后运行例程,从而自动扩展相关组合框的行源选择。

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

【问题讨论】:

  • 尝试使用Dim j As MSForms.Control - 假设表单上只有组合框。
  • 错误出现在哪一行?
  • 嗨 Rory...谢谢你的建议,但我没有改变任何东西
  • 嗨西蒙..错误在 j.rowsource = ...line
  • .j.rowsource 期望 range.address 而不是 range.valuerange reference 您现在拥有的。所以,在问题行的末尾添加.address

标签: excel combobox resize range vba


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-01
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-02
      • 2021-04-11
      相关资源
      最近更新 更多