Refresch non funziona



  • Refresch non funziona
    di EB-5.5 (utente non iscritto) data: 04/08/2015 16:44:03

    Buongiorno a tutti,

    utilizzo in una macro Excel il comando refresch per aggiornare i dati provenienti da Microsoft query.
    il comando di refresch si trova in mezzo ad altro codice VBA.
    Il problema consiste che non sempre i dati vengono aggiornati (casuale) anche se il comando di aggiornamento viene avviato (mondo che gira in basso a sx dello schermo).

    Dal momento che ci sono 7 fogli di estrazione con Microsoft query non uso refreschall, ma indico con l'istruzione sotto riportata la query specifica.
    Purtroppo l'aggiornamento totale dura circa 35 secondi e vorrei ridurlo ma non so come.
    Eseguendo il refresh solo su 3 dei fogli scendo a circa 25 ma è sempre troppo alto.

    Mi ritrovo quindi a dover rifare l'aggiornamento manuale con il pulsante "Aggiorna Tutti" per vedere veramente i dati aggiornati.

    Non capisco se il problema sia nei tempi di esecuzione, se sia necessario inserire dei blocchi (quali ?) per fermare l'esecuzione della macro fino a quando l'istruzione non sia completata o altro ancora.

    Purtroppo non sono un programmatore a tempo pieno e ho delle grosse lacune...
    Grazie in anticipo
     
    Workbooks(NF).Connections("Query da FMR_ODBC1").Refresh



  • di Vecchio Frac data: 04/08/2015 18:34:19

    Ma con l'aggiornamento manuale quanto tempo ci mette?
    Come attivi la connessione alla query?
    Prova a specificare il refresh sulla connessione ODBC con
    DoEvents
    Workbooks(NF).Connections("Query da FMR_ODBC1").OLEDBConnection.Refresh


    edit: Workbooks(NF).Connections("Query da FMR_ODBC1").ODBConnection.Refresh





  • di totygno71 data: 04/08/2015 22:25:42

    @VF
    Non mi ha considerato il metodo "Refresch" U_U



  • di Vecchio Frac data: 05/08/2015 07:32:36

    Ho sorvolato perche' non voglio fare il saputello ^_^





  • di EB-5.5 (utente non iscritto) data: 05/08/2015 11:41:31

    L'aggiornamento manuale dura circa 35 secondi.
    La connessione alle query è automatica all'apertura del file.

    Durante l'esecuzione della macro ho però bisogno di aggiornare le tabelle esterne (connessione ODBC) in quanto con la macro inserisco dei nuovi dati.

    Quello che noto è che l'istruzione refresh non è sincronizzata con il resto del codice vba.
    L'istruzione refresh, impiegandoci 25 secondi, non ha tempo di aggiornare i dati che la macro è già arrivata alla fine.

    Ho provato a inserire l'istruzione DoEvents (prima e dopo il refresh) ma non cambia nulla: l'esecuzione del codice VBA continua il suo percorso mentre l'aggiornamento fa il suo.

    Grazie per l'aiuto!



  • di Vecchio Frac data: 05/08/2015 14:06:44

    Mi viene in mente una soluzione brutale cioè usare Wait...
    Questo congela l'esecuzione del codice per dieci secondi:
    Application.Wait(Now + TimeValue("0:00:10"))
    Da applicare dopo il Refresh.
    Avendo capito male avevo suggerito DoEvents() che fa l'opposto: permette l'esecuzione del codice mentre è in esecuzione altro codice.
    Ignoro del tutto se Wait congela anche l'aggiornamento automatico all'apertura del file... è da provare.






  • di EB-5.5 (utente non iscritto) data: 05/08/2015 14:26:14

    Ho provato a utilizzare il wait, ma blocca anche l'aggiornamento del refresh.
    Quando trascorrono i 10 secondi riparte l'esecuzione della macro e insieme l'aggiornamento!

    Deve esserci un modo per sequenzializzare le operazioni ma non so come!

    Grazie



  • di Vecchio Frac data: 05/08/2015 15:03:41

    Vedo nella guida che l'oggetto ODBCConnection espone parecchi metodi.
    Alcuni interessanti che devi testare sono:
    - .BackgroundQuery
    - .EnableRefresh
    - .Refreshing

    In particolare quest'ultima è interessante... penso che puoi costruire un piccolo ciclo a vuoto che looppa finchè è in esecuzione il refresh:
    while Workbooks(NF).Connections("Query da FMR_ODBC1").Refreshing
    wend