LEGO LE MIBO 016 – UN OROLOGIO A DISPLAY CON EXCEL VBA
Martedì 18 maggio 2021
Oggi anche voi potrete rendervi partecipi della potenza di Excel VBA.
Vivremo insieme questa esperienza tramite un’esercitazione che in realtà non è poi di chissà quale utilità ma che, invece, ci farà comprendere le enormi potenzialità di questo software.
Come quasi sempre accade in informatica, partiamo dalla fine, cioè dall’oggetto che vogliamo realizzare.
Diamo cioè vita al LAYOUT del nostro orologio: eccolo! Un potente orologio a display.
Nota.
Wikipedia ci viene in aiuto. Layout = La disposizione sulla pagina degli elementi che costituiscono un bozzetto, per es. pubblicitario.
In altre parole è la ‘grafica’ ovvero il ‘modo’ in cui DISEGNEREMO il nostro prototipo a video.
Dunque una cosa sobria e molto semplice con un Bottone di Start e uno di Stop. Bene: dai che cominciamo!
p.s. I ‘pigri’ lo possono scaricare in allegato
Quindi:
1. apriamo Excel su Nuovo
2. Nuovo (Cartella di lavoro vuota)
Appare questo:
Nota:
Quando Excel crea qualcosa di nuovo, non crea un Foglio ma molto di più, cioè una Cartella di Fogli.
E’ un po' come se ci desse a disposizione un Quaderno intero formato da più di un Foglio, dato che non può sapere di quanti ne avremo bisogno.
E’ chiaro che, al momento della creazione della nuova cartella, ci venga mostrato il primo foglio della cartella, cioè il Foglio1.
Che io sappia non esistono limiti al numero dei Fogli di una Cartella ma so per certo che fino a 99 ciò è possibile.
Nota:
Come vedete, nella zona verde in alto, ci sono le icone delle ’personalizzazioni’, cioè del ‘settaggio’ che ho voluto dare al mio Excel.
Potete anche verificare (come già vi avevo detto) che lo ‘stile’ di questa Battaglia Navale è del tipo A1, cioè colonna, riga.
L’esatto opposto della Battaglia Navale tradizionale in cui le coordinate vanno al contrario, per riga e colonna. Pazienza !
3. Prima di andare avanti dobbiamo subito farci la domanda: DOVREMO O NO FARE USO DI VBA? In altre parole: il nostro sarà un Excel ‘normale’ o dovremo scomodare le Macro di Visual Basic for Application (VBA)? Ebbene, vi rispondo telegraficamente con questa regola empirica: Quando nel layout vedete dei Bottoni, state tranquilli che ci vuole VBA!. A cosa servono i Bottoni? Ma certo, i bottoni servono a INNESCARE UNO O PIU’ EVENTI, ovvero a mettere in moto un pezzetto di programma, cioè una Macro. Capito? Vedrete che col tempo e con l’esperienza la cosa si semplificherà e riuscirete a capire e progettare al volo il vostro lavoro.
4. Il punto precedente, cioè il fatto di aver compreso che dovrò far uso di Macro mi porta subito alla conclusione di DOVERLO DIRE A EXCEL. In che modo? Ma certo! Salvo subito la cartella con ‘estensione’ “xlsm” (dove la m finale sta per macro) … così:
Bene! A questo punto ho una Cartella a nome ‘Orologio’ ABILITATA ALLE MACRO DI EXCEL VBA (prossima immagine, freccia verde, suffisso XLSM).
La Cartella al momento è vuota ed è formata da UN UNICO FOGLIO a nome ‘Foglio1’ (freccia rossa).
La freccia blu evidenzia che stiamo lavorando in stile R1C1, cioè Riga e Colonna, così come serve a VBA.
Il cursore è fermo in R1C1, cioè in riga 1 e colonna 1.
5. Prima di procedere vorrei dirvi che Excel “normale”, cioè quello senza VBA, possiede moltissime FUNZIONI tra cui quella che interessa a noi, cioè l’orario. E allora ci chiediamo subito, perché dovremo scomodare VBA quando in quattro e quattr’otto potrei risolvere al volo la questione con una semplice funzione? Eh no! Alt! C’è una magagna … ma prima vediamo come si fa a inserire una funzione.
Ecco qua: se vado su ‘Formule’ (freccia gialla), la prima scelta a sinistra è, appunto, ‘Inserisci funzione’ (freccia viola).
Aprendo ‘Inserisci funzione’ trovo, in ordine alfabetico, quello che mi interessa, cioè Adesso()
Come ben spiegato in calce da Windows, la funzione Adesso() restituisce la data e l’ora.
Quindi mi posiziono nella cella R1C1 e digito: =adesso(). Mi raccomando di mettere il segno = davanti all’espressione.
Vediamo il risultato: bingo! In cella R1C1 compare la data e l’ora: 29 marzo 2021 ore 15:50 ! Orologio ok.
Mhhhh Mica vero
Purtroppo non è così perché, se anche voi ci proverete, troverete che questo orologio ‘non cammina’ cioè resta inchiodato senza aggiornarsi!
Perché mai abbiamo a che fare con un orologio cristallizzato?
La risposta sta nel fatto che la funzione adesso(), come altre, ha bisogno di essere SOLLECITATA DA UN EVENTO.
Cosa significa?
Significa che in questo foglio di lavoro QUALCOSA SI DEVE MUOVERE, cioè altre celle debbono cambiare contenuto, almeno una cella deve cambiare contenuto, diversamente anche l’orologio resterà fermo.
Tanto per fare un esempio, siccome più avanti avremo a che fare con celle di Excel i cui contenuti provengono dal DDE (Data Dynamic Exchange) della piattaforma della Banca … ebbene la ‘dinamicità’ (e dunque il ‘sollecito’ a cambiare il contenuto) potrebbe provenire proprio dal fatto di incorporare nel nostro Foglio delle celle di questo tipo. Ovviamente ci rendiamo subito conto che questa soluzione non sta né in cielo né in terra. Figurati se vado a scomodare il DDE per rendere DINAMICA la mia funzione adesso() !!!
Ecco che il problema diventa: COME SI PUO’ FARE PER ‘PUNGOLARE’ LA FUNZIONE DELL’OROLOGIO?
E’ chiaro: dovremo ricorrere in aiuto a VBA e, in quella sede, scatenare un EVENTO PUNGOLANTE CONTINUO E ARTIFICIALE.
Perfetto!
6. Poiché la lezione si sta dilungando un po' ma la questione sta diventando della massima importanza, resto convinto che questo sia il passo didattico giusto per cui spezzo la lezione in due parti. In cambio vi mostro subito la Macro VBA che risolve il nostro orologio con la promessa che la prossima volta la integreremo al giusto posto del progetto.
Ecco la Macro (in realtà sono due: Orologio e Quitta). Capiremo perché.
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
----------------------------------------------------------------------------------------------
Sub Quitta()
Excel.Application.Quit
End Sub
Bene! Quella di oggi è stata una lezione importante per cominciare a muoverci in un contesto strabiliante.
Ci rivediamo Venerdì 21 maggio, sempre qui, sul sito.
Potete scaricare l’orologio qui sotto. Buon divertimento!
Francesco Caranti