› Sviluppare funzionalita su Microsoft Office con VBA › Ora in tempo reale
-
AutoreArticoli
-
Buongiorno,
sfruculiando nel web ho trovato questo:
"in questa macro, se nella cella A1 c'è il valore 1 inserisce in B1 un orologio che segna l'avanzamento dei secondi.
Ora è molto grezza: si interrompe in modo brusco quando inserisci 0 in A1, ma il concetto è quello e si può affinare"Private Sub Orario() While Range("A1").Value = 1 Range("B1") = Now DoEvents Wend End Subseguito da questo:
"un piccolo affinamento della macro potrebbe consistere nell'abbinarla ad un evento worksheet:"
Private Sub Worksheet_SelectionChange(ByVal Target As Range) CheckArea = "A2:E100" '<< da estendere a volontà If Not Application.Intersect(Target, Range(CheckArea)) Is Nothing Then Call Orario End If End Subquesto modo permette in ogni momento di lavorare sul foglio, come modificare le celle o eseguire qualsiasi macro. Durante queste operazioni il timer si ferma ma poi riparte da sola fintanto che in A1 c'è il valore 1 e che selezioni una cella nel range.
Allora, sono a chiedere:
1) cosa fa esattamente la funzione "DoEvents"? L'ho intuito ma vorrei avere le idee più chiare, ovvero:
2) eseguendo la prima macro cosa succede oltre a far girare il tempo nella cella B1
3) Come si può lanciare l'esecuzione della seconda macro?
4) cos'è un "evento worksheet"?
5) A cosa serve la funzione "Intersect"?
6) eseguendo questa seconda macro (che poi esegue la call della prima) cosa cambia rispetto alla prima?
Grazie carissimi.
(P.S. ho esagerato con le domande? ... forse dovevo spezzarle in diverse discussioni?)
Ciao
Come prima cosa ti direi che esite un help delle funzioni e comandi VBA così come un'infinità di siti e forum. Cosultali...
Come seconda cosa tti dico che se
'ho intuito ma vorrei avere le idee più chiare
Spiegaci cosa hai capito...
Come terza cosa ti dico: fai prove, testa,....
Detto cio:
1) Come vedi la macro orario è un ciclo senza uscite ovvero se la lanciassi continuerebbe a girare in eterno e senza do event excel non farebbe null'altro nel mentre che non aspettare la fine della macro. L'istruzione Do event fa sì che la macro continui a girare ma excel accetti altri comandi.
Prova a togliere il do event e vedi cosa succede. (CTRL+Pausa si usa per fermare una macro)
2) La macro Orario legge il valore di A1 e se vale 1 allora scrive l'orario attuale in B1 e ricomincia.
3 e 4) la seconda macro è una macro che viene lanciata in automatico all'evento "SelectionChange" ovvero quando si cambia la selezione del foglio in cui è registrata. Esistono diversi eventi che vengono intercettati e possono far partire macro. Non esiste un evento worksheet benì un evento worksheet.selectionchange
5) per questo basta pigiare F1 (tasto funzione F1) sulla parola e ti apre l'help. Intersect genera un range che è l'intersezione ovvero la sovrapposizione di più range. Genera Nothing se i range dati non si intersecano.
6) la seconda macro semplicemente lancia la prima macro se cambi il range nel foglio e se la cella target (quella di arrivo dopo lo spostamento di selezione) è all'interno della CheckArea
Ciao Luca
Grazie Luca,
certo avevo intuito che la DoEvents servisse a questo, e, mentre girava "orario" vedevo che potevo selezionare altre celle, ma se provo ad inserire un valore in una cella mi da questo errore:

poi come vedi sto lavorando sotto mac os e non trovo il tasto "pausa" (cercato indicazioni sul web ma non l'avrei trovato, per ora ...) sai tu dirmi come fare per fermare una macro sotto mac?
Grazie, intanto mi studio il resto della tua risposta ...
-
AutoreArticoli
