【问题标题】:Creating dynamic range for VBA Combobox为 VBA 组合框创建动态范围
【发布时间】:2018-06-06 16:55:42
【问题描述】:

目前我正在 Excel VBA 上制作用户表单并使用组合框。 我有一个名为“Division”的范围(A2:A61),其中包括公司的部门。 当我将此数据添加到组合行源中时,我将命名范围 - 除法。 但另一方面,部门是动态的,我的意思是一年中会创建新部门。

问题是当我创建新分区时,我可以在单元格 A62 上看到它的名称,但它不包括范围 - 命名分区。结果我看不到更新的组合框列表。

首先我尝试将范围选择为(A:A)并将其称为除法。在这种情况下,我可以看到更新的组合框列表,但范围内的空白单元格给我带来了其他问题。

其次,我有此代码,我尝试将其用作组合框的行源,但出现错误。

Set Division = Worksheets("DataCMB").Range(Range("E2"), Range("E1048576").End(xlUp))

请帮忙找出问题。

【问题讨论】:

  • Range("E2")Range("E1048576") 链接到活动工作表,而不是 Worksheets("DataCMB")
  • Set Division = ...中,Division不是一个命名范围,它是一个Range变量。
  • 如果要在 vba 中修改命名范围,请查找 Names 集合

标签: excel vba combobox


【解决方案1】:

您可以将 A2:A61 作为表格插入并定义为“部门”名称。因此,当您添加新数据时,新数据将自动包含在“部门”名称中。

【讨论】:

  • 如果想使用 vba 尝试更改为 Division=Worksheets("DataCMB").Range(Range("E2"), Range("E1048576").End(xlUp)).address跨度>
  • 感谢您的回答。但是当我按照你所说的那样使用表时,我收到了调试消息。
  • Private Sub UserForm_Initialize() Division = Range(Range("A2"), Range("A2").End(xlDown)).Address Me.ComboBox1.RowSource = Division End Sub >
【解决方案2】:

您遇到的第一个问题,以及这里的其他一些答案,是您没有告诉您的第二个和第三个 Range 调用他们应该引用哪个工作表,所以在下面的行中您可以看到我添加了 Worksheets(" DataCMB") 在他们面前。如果没有它,它将使用可能未设置为 DataCMB 的 ActiveSheet,因此它将寻找位于不同工作表上的范围,但找不到它。

另一个问题是您的 .End(xlUp) 是从单个单元格而不是一个范围内工作的,所以我将其更改为查看整个列并向下而不是向上看。因此,下面的行将为您提供该列中所有内容的整个范围,但不包括底部的任何空白,也不包括标题。

Set Division = Worksheets("DataCMB").Range(Worksheets("DataCMB").Range("E2"), Worksheets("DataCMB").Range("E2:E1048576").End(xlDown))

【讨论】:

  • 丹尼尔,谢谢。这些建议修复了当我站在非 DataCMB 表上时发生的错误。
【解决方案3】:
Private Sub UserForm_Initialize()
  Division = Range(Range("A2"), Range("A2").End(xlDown)).Address
  Me.ComboBox1.RowSource = Division
End Sub

【讨论】:

  • 你在使用类似这样的代码吗?我没有遇到代码错误。
  • 或者,您可以将表格插入数据并将名称定义为“Division”。它会自动将新数据包含到您的“部门”名称中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-02
  • 2012-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-10
相关资源
最近更新 更多