Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 有没有一种方法可以自动指定组合框的范围而不必手动更改它?_Excel_Vba - Fatal编程技术网

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