Próbuję rozgryźć dziwną sytuację.Listbox ActiveX Excel nie jest włączony przy otwartym pliku
Mam skoroszyt z wieloma arkuszami. Na jednym arkuszu mam jedną listbox ActiveX (CTOverview.Listbox1). Na drugim arkuszu mam w sumie trzy listy list (CTSelected.Listbox1 przez Listbox3). Używam zapytania do wypełnienia Listbox1 na obu arkuszach tymi samymi danymi. Kod do tego jest poniżej:
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
Ten kod działa pięknie (nie mój kod - mam go z intertubes). Zarówno LIstbox1 na obu arkuszach ładuje się z listą odrębnych regionów. Jednak nie mogę uzyskać CTOverview.Listbox1, aby odpowiedzieć na jakiekolwiek wejście, dopóki nie wybiorę czegoś z CTSelected.Listbox1. Kiedy to zrobię, obie listy1 działają normalnie i nie są w żaden inny sposób połączone, przynajmniej na tyle, na ile mogę to stwierdzić.
Próbowałem zamknąć zestaw rekordów po tym, jak zalałem dwie listy Listbox1 (bez efektu). Próbowałem wybrać domyślny element w CTOverview.Listbox1 (bez efektu).
Tylko w przypadku, jest to ważne, tutaj jest mój kod, aby otworzyć/zamknąć rekordów:
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
O ile mogę powiedzieć, muszę wziąć skupić off arkusza CTOverview. Jeśli kliknę na dowolny inny arkusz, a następnie kliknę z powrotem do CTOverview, Listbox1 wydaje się działać. To jest problem, ponieważ CTOverview ma być moim arkuszem startowym.
Każdy pomysł, dlaczego tak się dzieje? Wyciągam włosy, próbując to rozgryźć. Wszelkie spostrzeżenia byłyby mile widziane.
Czy zapełniasz listbox w zdarzeniu worbook_open? –
tak, jestem. powyższy kod jest otwarty. – user2296377
Hmmm, tak myślałem. Odpowiedziałem na podobne pytanie (nie jestem pewien, czy było to w SO, czy na jakimś innym forum). Nie pamiętam nawet, co sugerowałem, ale zadziałało .... Cholera! W każdym razie. Możesz spróbować tego dla mnie. Po wypełnieniu listbox, na samym końcu (tuż przed końcem sub) aktywuj arkusz 2, aw następnym wierszu aktywuj arkusz uruchamiania. Użyj 'Application.Screenupdating = false', aby upewnić się, że nie miga ekran. Teraz przetestuj to. –