我有一列动态的,所以列的长度可以变化。
在这种情况下,如果我将ListFillRange
指定为A:A
,它将在ComboBox中添加很多空单元格。我希望它仅添加不为空的单元格,因此在这种情况下为A1,A2和A3。但是,如果列的长度更改为A1:A4
,则我希望ComboBox自动添加该第四个单元格,而无需手动更改“填充范围”。
答案 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