Tips & Tricks‎ > ‎

TT-201611 La funzione Timer - VBA



Quando si importano grossi database, o si devono fare operazioni complesse su grosse moli di dati, io implemento sempre una procedura di monitoring che
sostanzialmente mi restituisce due informazioni importanti:

  • A che punto sono arrivato con i vari calcoli
  • Quanto tempo ci ha messo il codice (cioe' ad esempio l'importazione del database) a girare.

Vediamo il secondo aspetto della misura, che e' molto utile per migliorare le performances del codice scritto e per avere quindi un riferimento preciso su cui lavorare.

Potrei ad esempio essere interessato a misuare le performance (per migliorarle ovviamente) di una procedura di import di un grosso database e questo si potrebbe
ottenere definendo il momento in cui iniziare la misura, eseguire il codice, e misurare il tempo trascorso alla fine.

Forse non tutti sanno che esiste un'utile funzione standard denominata Timer ( qui utilizzata insieme alle funzioni Round e Format, di semplice utilizzo) che funziona proprio in questo modo: la prima chiamata definisce l'inizio del conteggio,  la seconda chiamata ne definisce il tempo trascorso.

Quindi basta riformattare il risultato secondo i nostri scopi ed evidenziarlo in qualche modo, ad esempio tramite MsgBox oppure andando ad aggiornare una variabile predisposta.

Di seguito due routine: la prima per il tempo misurato in secondi e la seconda in minuti.

Basta inserire le chiamate di Timer nei punti opportuni ed avremo la nostra misura.


Sub CalcoloRunTime_Secondi()
'Calcola in quanti secondi gira il codice di riferimento

Dim StartTime As Double
Dim SecondsElapsed As Double

'Inizio conteggio

  StartTime = Timer

'*****************************
'Codice
'*****************************

'Fine conteggio
  SecondsElapsed = Round(Timer - StartTime, 2)

'Notifica via MsgBox
  MsgBox "Questo codice ha girato in " & SecondsElapsed & " secondi", vbInformation

End Sub


Sub CalcoloRunTime_Minutes()
'Calcola in quanti minuti gira il codice di riferimento

Dim StartTime As Double
Dim MinutesElapsed As String

'Inizio conteggio

  StartTime = Timer

'*****************************
'Codice
'*****************************

'Fine conteggio
  MinutesElapsed = Format((Timer - StartTime) / 86400, "hh:mm:ss")

'Notifica via MsgBox
  MsgBox "Questo codice ha girato in " & MinutesElapsed & " minuti", vbInformation

End Sub