Почему мой ComboBox показывает только первый результат? - PullRequest
0 голосов
/ 09 марта 2019

У меня есть Combobox, которому я пытаюсь передать аргументы из строки заголовка таблицы.

Проблема, по какой-то причине, в моем Combobox отображается только первый результат, хотя, по всей логике, не должно.

Это мои данные, начиная с B2:J2 (проблема в том, что они динамические, поэтому я не могу просто передать через Properties

enter image description here

После активации моего UserForm я пытаюсь получить длину таблицы (поскольку она динамическая и может изменять количество столбцов до UserForm активации)

Private Sub UserForm_Activate()
    Dim res As String
    Dim cell As Range: Set cell = Sheets("Pomocne").Range("B2")
    Dim endcell As Range
    Do Until IsEmpty(cell)
        Set endcell = cell
        Set cell = cell.Offset(0, 1)
    Loop

    res = "Pomocne!B2:" & Replace(endcell.address, "$", "")
    obor_combo.RowSource = res

    Debug.Print res
End Sub

Теперь, кажется, все работает нормально, так как Debug.print res дает следующий результат:

enter image description here

это именно то, что я передаю obor_combo.RowSource = res однако. когда я проверяю фактический UserForm по неизвестной причине, кажется, что он показывает только первый результат.

Есть идеи, что может быть причиной?

enter image description here

1 Ответ

1 голос
/ 09 марта 2019

RowSource предназначен для столбцовидного диапазона: если вы назначите ему рядообразный диапазон, вы получите только первую ячейку

Но вы можете использовать свойство List объекта ComboBox и заполнить его полученными значениями, транспонируя рядные диапазоны:

Private Sub UserForm_Activate()
    Dim res As String
    Dim cell As Range: Set cell = Sheets("Pomocne").Range("B2")
    Dim endcell As Range
    Do Until IsEmpty(cell)
        Set endcell = cell
        Set cell = cell.Offset(0, 1)
    Loop

    res = "Pomocne!B2:" & Replace(endcell.Address, "$", "")
    obor_combo.List = Application.Transpose(Range(res).Value)    
End Sub

, который можно упростить до:

Private Sub UserForm_Activate()    
    With Sheets("Pomocne")
        obor_combo.List = Application.Transpose(.Range("B2", .Cells(2, .Columns.Count).End(xlToLeft)).Value)
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...