Как создать массив ActiveX Comboboxes - PullRequest
1 голос
/ 19 мая 2019

Я пытаюсь динамически добавить на лист Excel несколько выпадающих списков activex, количество и содержание которых зависит от других ранее установленных данных.Я хочу сохранить их в массиве для последующего управления их содержимым (в том же листе будут другие списки со специальным назначением).Я запускаю следующий код:

Sub run_Combo_Test()

    Dim DestinationBookmarkCombo() As Object
    Dim i, k As Integer
    Dim nCombos, nHeaderLines, nOptions As Integer

    nCombos = 5
    nOptions = 4
    nHeaderLines = 3

    ReDim DestinationBookmarkCombo(0 To nCombos - 1) As Object
    For i = 0 To nCombos - 1
        Set DestinationBookmarkCombo(i) = Worksheets("bula").OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
                Link:=False, DisplayAsIcon:=False, Left:=50, Top:=80, Width:=100, _
                Height:=15)
        With DestinationBookmarkCombo(i)
        With .Object
            .Left = xlApp.Worksheets("bula").Cells(nHeaderLines + 1 + i, 4).Left
            .Top = xlApp.Worksheets("bula").Cells(nHeaderLines + 1 + i, 4).Top
            .Placement = 1
            For k = 1 To nOptions
                .AddItem "Option " + CStr(k)
            Next k
            .Name = "Combo_" + CStr(i)
            '.OnAction = "myCombo_Change"
        End With
        End With
    Next i

End Sub

Код генерирует один пустой комбинированный список и возвращает ошибку «Требуется объект».Я не могу отследить, где проблема.Может кто-нибудь помочь?Заранее спасибо!

1 Ответ

0 голосов
/ 19 мая 2019

Я думаю, вам просто нужно добавить ".Object" перед AddItem.Сложно отлаживать подобные вещи, потому что VBA не хочет разрешать точки останова или переходы при добавлении объектов пользовательского интерфейса на лету.

Option Explicit

Sub run_Combo_Test()

Dim DestinationBookmarkCombo() As Object
Dim i, k As Integer
Dim nCombos, nHeaderLines, nOptions As Integer

nCombos = 3
nOptions = 4
nHeaderLines = 3

ReDim DestinationBookmarkCombo(0 To nCombos - 1)

For i = 0 To nCombos - 1
    Set DestinationBookmarkCombo(i) = Worksheets("bula").OLEObjects.Add(ClassType:="Forms.ComboBox.1", _
            Link:=False, DisplayAsIcon:=False, Left:=50, Top:=80, Width:=100, _
            Height:=15)
    DestinationBookmarkCombo(i).Left = Worksheets("bula").Cells(nHeaderLines + 1 + i, 4).Left
    DestinationBookmarkCombo(i).Top = Worksheets("bula").Cells(nHeaderLines + 1 + i, 4).Top
    DestinationBookmarkCombo(i).Placement = 1
    For k = 1 To nOptions
        DestinationBookmarkCombo(i).Object.AddItem "Option " & CStr(k)
    Next k
    DestinationBookmarkCombo(i).Name = "Combo_" + CStr(i)
Next i


End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...