Вы можете использовать событие 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
.. с:
'.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