Подтвердить что ты не робот

Excel ActiveX Listbox не включен в файл открыт

Я пытаюсь понять странную ситуацию.

У меня есть книга со многими листами. На одном листе у меня есть один список ActiveX (CTOverview.Listbox1). На втором листе у меня есть в общей сложности три списка (CTSelected.Listbox1 через Listbox3). Я использую запрос, чтобы заполнить Listbox1 на обоих листах теми же данными. Код для этого ниже:

strSQL = "Select Distinct [Region] From [UniqueCTList$] Order by [Region]"
closeRS
OpenDB

' initialize listboxes
CTSelect.ListBox1.Clear
CTSelect.ListBox2.Clear
CTSelect.ListBox3.Clear
CTOverview.ListBox1.Clear

' initialize with entire division value
CTSelect.ListBox1.AddItem "Entire Division"
CTOverview.ListBox1.AddItem "Entire Division"

' initialize selected Tech
CTData.Range("CT_Selected") = ""

' populate listboxes using recordset
rs.Open strSQL, cnn, adOpenKeyset, adLockOptimistic

If rs.RecordCount > 0 Then
    Do While Not rs.EOF
        CTOverview.ListBox1.AddItem rs.Fields(0)
        CTSelect.ListBox1.AddItem rs.Fields(0)
        rs.MoveNext
    Loop
Else
    MsgBox "I was not able to find any unique Regions.", vbCritical + vbOKOnly
    Exit Sub
End If

Этот код работает красиво (не мой код - я получил его из intertubes). Оба LIstbox1 на обоих листах загружают список отдельных регионов. Однако я не могу заставить CTOverview.Listbox1 отвечать на любой ввод, пока я не выбрал что-то из CTSelected.Listbox1. Как только я это сделаю, оба Listbox1 работают нормально и не связаны иным образом, по крайней мере, насколько я могу судить.

Я попытался закрыть набор записей после того, как я заполнил два Listbox1 (без эффекта). Я попытался выбрать элемент по умолчанию в CTOverview.Listbox1 (без эффекта).

На всякий случай это имеет значение, вот мой код для открытия/закрытия набора записей:

Public Sub OpenDB()
    If cnn.State = adStateOpen Then cnn.Close

    cnn.ConnectionString = "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)}; _
        DBQ=" & ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name

    cnn.Open
End Sub


Public Sub closeRS()
    If rs.State = adStateOpen Then rs.Close
    rs.CursorLocation = adUseClient
End Sub

Насколько я могу судить, мне нужно снять фокус с листа CTOverview. Если я нажму на любой другой лист, а затем вернусь к CTOverview, Listbox1, похоже, сработает. Это проблема, потому что CTOverview должен быть моим стартовым листом.

Любая идея, почему это может произойти? Я вытягиваю свои волосы, пытаясь понять это. Любые идеи были бы оценены.

4b9b3361

Ответ 1

Siddharth Rout предоставил ответ в комментарии. После того, как вы заполнили список, прямо в конце (только до конца) активируйте sheet2, а в следующей строке активируйте лист запуска. Используйте Application.Screenupdating =false, чтобы не мерцать экран.