【问题标题】:Dynamic range in combobox list组合框列表中的动态范围
【发布时间】:2016-03-03 05:23:52
【问题描述】:

我使用两种方法在组合框行源中构建动态名称列表。在第一个实例中,我使用:

使用 Sheet2

RateComboBox.RowSource = "'" & .Name & "'!" & .Range("b9", .Range("c33").End(xlUp)).Address 结束于

控制源设置为工作表上的一个单元格,绑定的列是第 1 列,或范围 b9:b33,其编号为 1-25,列计数为 2,第二列列表名称(1- 25) 因为它们被添加。在 C9:C33 范围满之前它工作得很好,此时下拉列表显示一个虚假列表,其中包含现在从 B1 开始的项目(文本)。发生了什么?

在第二种情况下我使用:

Me.ComboBox1.RowSource = Worksheets("Form").Range("B8", Range("B32").End(xlUp)).Address

在 b8:B32 范围内添加了名称,因为它们被添加到那里。控制源设置为工作表上的一个单元格,绑定列是第 1 列。在(列表)范围已满之前,它再次工作得很好。在这两种情况下,我只希望在组合框中的项目(名称)被添加到这些范围内时被列出。 ??

【问题讨论】:

  • 如果单元格 32 有文本,它将一直运行到下一个空单元格...就像在第一个示例中一样,您应该从 34 开始或从第一个单元格 (9) 向下移动
  • 有趣的是,第一个示例中列出了高于 b9 的文本,第二个示例也是如此。我应该如何编码?
  • 检查最后一个单元格是否为空...如果是:照此执行,里面有文本直接选择最后一个...

标签: excel vba


【解决方案1】:

对于这样的第一部分:

If Len(.Range("c33").Value) Then
  RateComboBox.RowSource = "'" & .Name & "'!B9:C33"
Else
  RateComboBox.RowSource = "'" & .Name & "'!" & .Range("b9", .Range("c33").End(xlUp)).Address
End If

第二部分也一样:

If Len(Range("B32").Value) Then
  Me.ComboBox1.RowSource = Worksheets("Form").Range("B8:B32").Address
Else
  Me.ComboBox1.RowSource = Worksheets("Form").Range("B8", Range("B32").End(xlUp)).Address
End If

【讨论】:

  • 将其添加到答案中;)
  • 在您的第一个回复中,您提到 c33 应该更改为 c34。您的第一部分响应是否应该是 .range("c34") 和 b9:c34" 和 .range ("C34").end(xlup) 并且发送部分响应调整为 b33 等?
  • 主要部分只是End(xlUp)的第一个单元格应该为空才能正常工作......这就像选择一个单元格并点击Strg +向上箭头一样。只需检查单元格为空时会发生什么(以及如果不是,它会如何操作)
猜你喜欢
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 2010-10-12
相关资源
最近更新 更多