Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Salve a tutti,
sto lavorando ad un progetto per il quale mi occorre raccogliere continuamente dei dati da una pagina web per tenerli aggiornati in tempo reale (facciamo ogni 15-20 secondi). Quello che mi occorre, dunque, e' una macro che navighi il sito web online, scarichi i dati da HTML, li lavori su Excel e li inserisca in una tabella predefinita per mostrarli in tempo reale agli utenti. Ho gia' perfettamente in mente come fare tutto cio', ma il mio dubbio e' il seguente:
Lasciando eseguire la macro automaticamente ogni 15 secondi (esempio brutale: con un Application.Wait di 15 secondi ed un loop continuo) **Excel rimarra' continuamente inutilizzabile dal momento che la macro continuera' a girare ed impedira' la regolare funzionalita' di Excel.**Alla luce di questo, mi chiedevo:
- E' possibile impostare un'istruzione che faccia eseguire la macro senza alterare tutte le funzioni di Excel?
- Meglio ancora, e' possibile chiedere all'Application Excel di eseguire la propria macro ogni tot. di secondi, senza bisogno di farla entrare in un Do-Loop infinito(ed eseguirla quindi ogni volta di nuovo)?
Grazie a tutti in anticipo!
Ciao Matteo,
in questo caso specifico, non devi utilizzare Wait, bensì OnTime. Ecco un esempio.
Andrea.
Option Explicit
Public refreshInterval As Double
Public refreshOn As Boolean
Public runWhen As Date
Sub toggleRefresh()
Const seconds As Double= 15 / 86400#
refreshOn = Not refreshOn
refreshInterval = seconds
If refreshOn Then
startRefresh
Else
stopRefresh
End If
End Sub
Sub startRefresh()
On Error Resume Next
runWhen = Now + refreshInterval
Application.OnTime runWhen, "refresh", , True
End Sub
Sub stopRefresh()
On Error Resume Next
Application.OnTime runWhen, "refresh", , False
On Error GoTo 0
End Sub
Sub refresh()
'---------- codice da eseguire scaduto il tempo
macro blahBlah
On Error Resume Next
runWhen = Now + refreshInterval
Application.OnTime runWhen, "refresh"
On Error GoTo 0
End Sub