2013-04-24 11 views
12

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.

+0

Si sta compilando la casella di riepilogo nell'evento worbook_open? –

+0

sì, lo sono. il codice sopra viene eseguito su open. – user2296377

+14

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. –

risposta

0

Siddharth Rout provided the answer in a comment. 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. Utilizzare Application.Screenupdating =false per assicurarsi che non vi sia sfarfallio dello schermo.

Problemi correlati