Есть ли способ автоматически указать диапазон ComboBox без необходимости его изменения вручную? - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть динамический столбец, поэтому длина столбца может варьироваться.

enter image description here

В этом случае, если я укажу ListFillRange равным A:A, он добавит много пустых ячеек в ComboBox. Я хочу, чтобы он только добавил ячейки, которые не являются пустыми, поэтому в этом случае A1, A2 и A3. Однако если длина столбца изменится на A1:A4, я хочу, чтобы ComboBox автоматически добавил четвертую ячейку без необходимости вручную изменять диапазон заполнения.

1 Ответ

1 голос
/ 30 апреля 2019

Вы можете использовать событие 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...