有没有一种方法可以自动指定ComboBox的范围而无需手动更改它?

时间:2019-04-29 21:20:54

标签: excel vba

我有一列动态的,所以列的长度可以变化。

enter image description here

在这种情况下,如果我将ListFillRange指定为A:A,它将在ComboBox中添加很多空单元格。我希望它仅添加不为空的单元格,因此在这种情况下为A1,A2和A3。但是,如果列的长度更改为A1:A4,则我希望ComboBox自动添加该第四个单元格,而无需手动更改“填充范围”。

1 个答案:

答案 0 :(得分:1)

每当更改A列中的单元格时,就可以使用Worksheet_Change事件来更改ListFillRange。假设工作表为Sheet1,并且您的ComboBox名称为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

请注意,这将在第一行和lastRow之间保留所有空白单元格。如果这不是您想要的行为,则可以替换以下行:

.ComboBox1.ListFillRange = "A1:A" & lastRow

.. with:

'.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