Venerdì 21 maggio 2021
Spezzo subito una lancia a vostro favore.
Cioè: non si può e non si deve pensare che la costruzione di un orologio a display VBA (con i vari passaggi) ci porti a concludere di essere o non essere predisposti all’informatica.
Esatto! Non è così: qui non c’è posto per lo sconforto.
Io ho lanciato un pezzo difficile non tanto per discriminare chi tra voi continuerà a seguire ma, al momento, soltanto per spiegare la potenza di un software (VBA) che neanche sapevamo di avere nel nostro piccolo computer di casa.
Dal discriminante dell’equazione di secondo grado di qualche lezione fa, siamo passati a un orologio a display: è incredibile quanto sia polivalente questo prodotto!
VBA utilizza una ‘programmazione a blocchi’ oltre a tantissime altre routine di sistema.
La ‘programmazione a blocchi’, per così dire, traduce il diagramma di flusso di qualsiasi ragionamento mentale: “Inizio, procedo, concludo’.
Tanto nel calcolo del discriminante dell’equazione di secondo grado, quanto nell’orologio a display, il concetto è sempre lo stesso: TRADUCO IL MIO RAGIONAMENTO IN TANTI BLOCCHI SEQUENZIALI.
…
Ma torniamo al nostro orologio partendo dai BOTTONI DI START e STOP.
Che cosa realmente succede quando schiaccio un BOTTONE?
Ma certo! Metto in moto un processo che prende il nome di EVENTO.
Partiamo dall’evento più semplice: quello rosso che termina il processo. L’evento STOP deve concludere l’elaborazione.
Con un facile aggancio il bottone rosso di stop si collegherà a una MACRO (nel nostro caso si chiama ‘Quitta’ ma si potrebbe anche chiamare ‘Topolino’) che in buona sostanza dice al Sistema: “L’applicazione Excel viene chiusa”.
Bingo! Abbiamo capito una cosa fondamentale di VBA: POSSIAMO ASSOCIARE UNA MACRO QUALSIASI A UN BOTTONE, che altro non è che una ‘FORMA’ di Excel (se guardate ‘Inserisci, Illustrazione, Forme’ troverete infinite forme) … io scelgo sempre la stessa (RETTANGOLO SMUSSATO) a cui all’interno scrivo un nome di convenienza e fantasia tipo ‘Quitta’.
Ecco come ho impostato la Macro:
Sub Quitta()
Excel.Application.Quit
End Sub
Nota:
Una Macro inizia sempre con ‘Sub’ spazio ‘Nome della Macro ()’ <aperta e chiusa la parentesi>.
La Macro termina sempre con ‘End Sub’
Nota:
Tra ‘Sub’ e ‘End Sub’ il programmatore scriverà il cosiddetto ‘codice’ rispettando la sintassi del linguaggio VBA che occorre conoscere.
Per esempio: ‘Excel.Application.Quit’ è una espressione che dovrà essere conosciuta.
—
Riepilogando:
- La pressione di un BOTTONE corrisponde all’attivazione di un EVENTO
- Ad ogni EVENTO corrisponde una Macro VBA
- Ogni Macro VBA inizia con Sub nome-macro () e termina con End Sub ()
Inoltre:
- Una Macro può CONCLUDERE un EVENTO (es: ‘Quitta’)
- Una Macro può INIZIALIZZARE UN EVENTO ALL’INFINITO che prende il nome di ‘Loop’ (es: il nostro OROLOGIO potrebbe anche continuare a camminare all’infinito senza fermarsi più)
- Una Macro può CONCLUDERSI AL VERIFICARSI DI CERTE CONDIZIONI (Esempio: CHIUDI L’OROLOGIO ALLE ORE 03:00:00)
IL BOTTONE START
Come dicevamo, al bottone START corrisponde la Macro “Orologio” che vi ripropongo:
Sub Orologio()
Dim Minuti As Integer
Dim Secondi As Integer
Dim Tempo As String
Minuti = 0
Secondi = 1
Tempo = “00:” + Format(Minuti, “0#”) + “:” + Format(Secondi, “0#”)
Application.OnTime Now + TimeValue(Tempo), “Orologio”
Cells(7, 4) = Now
End Sub
Facile?
Vediamo come affrontare la spiegazione:
1. Sub Orologio()
Fin qui niente da dire: la Macro si chiama ‘Orologio’ e viene attivata tramite il BOTTONE ‘Start’
2. Dim Minuti As Integer
Dim Secondi As Integer
Dim Tempo As String
Vediamo.
La costante ‘Dim’ è l’abbreviazione di ‘Dimension’. In sostanza stiamo definendo (dimensionando) la variabile ‘Minuti’ come ‘numero intero’.
Anche la variabile ‘Secondi’ sarà un ‘numero intero’.
Diversamente, la variabile ‘Tempo’ sarà una ‘stringa’, cioè un pezzetto di memoria senza particolari proprietà se non il fatto che può essere ‘editata’ cioè confezionata come meglio ci conviene. Nel nostro caso la stringa ‘Tempo’ verrà utilizzata per mascherare l’orario in modalità “gg/mm/aaaa hh:mm:ss” secondo la notazione standard come nell’immagine.
3. Minuti = 0
Secondi = 1
Rappresenta l’inizializzazione delle due variabili che cambieranno stato continuamente, al passare del tempo.
Qui parte il ciclo di programmazione.
4. Tempo = “00:” + Format(Minuti, “0#”) + “:” + Format(Secondi, “0#”)
Questa istruzione dice alla stringa ‘Tempo’ come saranno composti ed editati i valori: ore, minuti, secondi.
5. Application.OnTime Now + TimeValue(Tempo), “Orologio”
E questo è il vero cuore di tutto il programma.
Avendo posto che il ritmo (il clock) è di 1 secondo, l’orologio acquisisce il tempo per poi fermarsi per 1 secondo. Quindi riprenderà l’acquisizione col risultato CHE AVREMO UN OROLOGIO CON CLOCK DI 1 SECONDO ESATTO (quello che ci serve).
Nota:
Ma, scusate, non si faceva prima a dirgli: ‘buttami l’orario e basta”, senza cioè creare la pausa di 1 secondo?
No, non è così.
E’ vero: l’orologio avrebbe funzionato ugualmente ma NON SAREMMO PIU’ RIUSCITI A FERMARLO, cioè avremmo ottenuto un loop perpetuo pena l’utilizzo dell’odioso comando ctrl-alt-canc per terminare Excel.
Al contrario, la pausa di quel brevissimo tempo di un secondo, permette di subentrare con l’EVENTO SUPERIORE di chiusura tramite il suddetto QUIT.
Abbiamo finito!
Vi lascio a riflettere sul codice VBA di oggi e a rimaneggiarlo a vostro piacimento (più sotto il programma da scaricare).
Che dire, per esempio, di provare a cambiare il clock da 1 a 5 secondi?
Attendo esperimenti e commenti.
Potete scaricare l’orologio qui sotto.
Ci rivediamo martedì 25 maggio.
Francesco Caranti