Sto cercando di capire una situazione bizzarra.Casella di riepilogo ActiveX di Excel non abilitata sul file aperto
Ho una cartella di lavoro con molti fogli. Su un foglio, ho una casella di riepilogo ActiveX (CTOverview.Listbox1). In un secondo foglio, ho un totale di tre listbox (CTSelected.Listbox1 attraverso Listbox3). Sto usando una query per popolare Listbox1 su entrambi i fogli con gli stessi dati. Il codice per questo è qui sotto:
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
Questo codice funziona in modo bello (non il mio codice - l'ho presa da intertubes). Entrambi i LIstbox1 su entrambi i fogli vengono caricati con l'elenco delle regioni distinte. Tuttavia, non riesco a ottenere CTOverview.Listbox1 per rispondere a qualsiasi input fino a quando non ho selezionato qualcosa da CTSelected.Listbox1. Una volta fatto ciò, entrambi i Listbox1 funzionano normalmente e non sono altrimenti collegati, almeno per quanto posso dire.
Ho provato a chiudere il recordset dopo aver compilato i due Listbox1 (nessun effetto). Ho provato a selezionare un elemento predefinito in CTOverview.Listbox1 (nessun effetto).
Solo nel caso conta, qui è il mio codice per aprire/chiudere il set di record:
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
Per quanto posso dire, devo prendere fuoco fuori del foglio CTOverview. Se clicco su un altro foglio, poi torno a CTOverview, Listbox1 sembra funzionare. Questo è un problema perché CTOverview dovrebbe essere il mio foglio di lancio.
Qualche idea sul perché questo potrebbe accadere? Sto tirando fuori i miei capelli cercando di capirlo. Qualsiasi intuizione sarebbe molto apprezzata.
Si sta compilando la casella di riepilogo nell'evento worbook_open? –
sì, lo sono. il codice sopra viene eseguito su open. – user2296377
Hmmm, lo pensavo. Avevo risposto a una domanda simile (non sono sicuro se fosse in SO o in qualche altro forum). Non ricordo nemmeno quello che ho suggerito ma ha funzionato .... Accidenti! In ogni modo. Puoi provare questo per me. Dopo aver popolato la casella di riepilogo, proprio alla fine (poco prima di end sub) attivare sheet2 e nella riga successiva attivare il foglio di avvio. Usa 'Application.Screenupdating = false' per assicurarti che non ci sia sfarfallio dello schermo. Ora provalo. –