У меня есть небольшой код VBA, в котором он содержит 3 listBox, и список основан на определенном диапазоне. можно ли выполнить итерацию цикла для нескольких списков Sheet4.ListBox & i & .AddItem "Select All"

Вот мой код ниже.

    Sub Test()

        Dim i As Integer
        Dim MyRange As Range
        Dim ws As Worksheet
        Set ws = ThisWorkbook.Sheets("RESULT")
        last_row = Cells(Rows.Count, "B").End(xlUp).Row
        For i = 1 to 3 
        Set MyRange = ws.Range(Cells(2,i),Cells(last_row,i))
        Call update_listbox(i, MyRange)

End Sub

Sub(update_listbox)
'here i am updating my listing in ListBox

        Sheet4.ListBox & i &.Clear      ''Getting Error here    
        Sheet4.ListBox & i & .AddItem "Select All"  ''Getting Error here        
        Dim myList As Collection
        Dim myVal As Variant
        Set myList = New Collection
        On Error Resume Next
        For Each myCell In myRange.Cells
        myList.Add myCell.Value, CStr(myCell.Value)
        Next myCell
        On Error GoTo 0
        For Each myVal In myList
        Sheet4.ListBox & i &.AddItem myVal      'Getting Error here 
        Next myVal
End Sub

Пожалуйста помоги. нужен другой обходной путь, если это невозможно

-1
Prayag 14 Окт 2018 в 16:10

1 ответ

Лучший ответ

ListBox & i создает строку "ListBox1" или "ListBox2" и т. Д. Вы не можете использовать это для идентификации объекта списка напрямую, как вы пытались, но вы можете использовать строку для идентификации списка из квалифицированной коллекции.

Вот два метода итерации по объектам ListBox рабочего листа из закрытого кода листа (щелкните правой кнопкой мыши вкладку имени рабочего листа, Просмотреть код).

Option Explicit

Sub refLBs()
    Dim c As Object, i As Long

    For Each c In Me.OLEObjects
        Debug.Print c.Name
    Next c

    For i = 1 To Me.OLEObjects.Count
        Debug.Print Me.OLEObjects("listbox" & i).Name
    Next i
End Sub
1
user4039065user4039065 14 Окт 2018 в 13:27