Excel 有没有一种方法可以自动指定组合框的范围而不必手动更改它?
我有一个动态的列,因此列的长度可以变化Excel 有没有一种方法可以自动指定组合框的范围而不必手动更改它?,excel,vba,Excel,Vba,我有一个动态的列,因此列的长度可以变化 在这种情况下,如果我将ListFillRange指定为A:A,它将向组合框添加大量空单元格。我希望它只添加不为空的单元格,因此在本例中为A1、A2和A3。但是,如果列的长度更改为A1:A4,我希望组合框自动添加第四个单元格,而不必手动更改填充范围。您可以使用工作表\u change事件更改列表填充范围。假设工作表是Sheet1,并且您的组合框名称是ComboBox1,您可以执行以下操作: Option Explicit Private Sub Work
在这种情况下,如果我将
ListFillRange
指定为A:A
,它将向组合框添加大量空单元格。我希望它只添加不为空的单元格,因此在本例中为A1、A2和A3。但是,如果列的长度更改为A1:A4
,我希望组合框自动添加第四个单元格,而不必手动更改填充范围。您可以使用工作表\u change
事件更改列表填充范围
。假设工作表是Sheet1
,并且您的组合框名称是ComboBox1
,您可以执行以下操作:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
With Sheet1
If Intersect(Target, .Range("A:A")) Is Nothing Then Exit Sub
Dim lastRow As Long
lastRow = .Range("A" & .Rows.Count).End(xlUp).Row
.ComboBox1.ListFillRange = "A1:A" & lastRow
End With
End Sub
请注意,这将在第一行和最后一行之间保留所有空单元格。如果这不是您想要的行为,则可以替换该行:
.ComboBox1.ListFillRange = "A1:A" & lastRow
…与:
'.ComboBox1.ListFillRange = "" ' You can do this manually.
.ComboBox1.Clear
Dim i As Long, cell As Range
For i = 1 To lastRow
Set cell = .Cells(i, 1)
If Not IsEmpty(cell) Then .ComboBox1.AddItem (cell.Value)
Next
查看如何定义列的最后一行,然后可以循环该列中的每个单元格,并将其添加到组合框中。或者,您可以将A列中的项目作为表格放置,然后参考该
ListObject
。这完全取决于A列中数据的更新频率。这可能是一个愚蠢的问题,但您能否澄清一下在哪里运行此代码?我的工作簿中已经有一个宏,它不允许我将两个私有子方法放在同一个位置。似乎如果我删除了“Option Explicit”,它就可以运行它了。您能否指定组合框所在的是工作表,还是我的列所在的工作表,我需要在其中写入代码?我假设组合框和列都位于同一工作表上。如果是这样,请将代码放在该工作表下,在本例中为Sheet1
(参见a)。如果它们不在同一工作表中,则将代码放在具有列的工作表下,并且在使用.ComboBox1
时,需要修改上面的代码以使用其他工作表名称。希望这是清楚的。如果Option Explicit
给您带来了问题,那么您可能有未定义的变量。要么定义它们(使用Dim
),要么删除我不推荐的选项Explicit
。