Condividi:        

Excel - Sincronizzazione orario

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Excel - Sincronizzazione orario

Postdi Flash30005 » 24/02/09 10:05

Ho un foglio in Excel e in una cella C2 viene riportato (o all'avvio o tramite un comando Start) l'orario del Pc in hh:mm
Ho una macro che ogni 60 secondi aggiorna quel valore ma così facendo ho il minuto non sincronizzato con quello del Pc nel senso che se lo start è avvenuto alle 09:58:20 (hh:mm:ss) l'oraologio del Pc cambia il minuto dopo 40 secondi e quindi mi trovo con il minuto (valore cella C2) sfalsato rispetto al minuto del Pc.
C'è una maniera per sincronizzare almeno all'avvio senza che la macro entrando in loop di attesa sincronismo occupi risorse? (Ne ho realizzata una funzionante ma fino a che non scattava il minuto successivo, Excel non dava "spazio" ad altri eventi).
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Sponsor
 

Re: Excel - Sincronizzazione orario

Postdi Flash30005 » 24/02/09 15:28

Allo stato attuale delle cose ho risolto applicando un suggerimento di Anthony di qualche giorno fa
con questi codici
Codice: Seleziona tutto
Sub Tempopausa()
OraSincr = 60 - Int((Timer / 60 - Int(Timer / 60)) * 60)   '<<< calcolo i secondi mancanti al minuto successivo
If OraSincr = 60 Then OraSincr = "00"
If VariaPausa = 0 Then GoTo esci             '<<< Il Pulsante Stop azzera il valore
Call AvvioStart
Application.OnTime Now + TimeValue("00:00:" & OraSincr), "Tempopausa"
'Application.OnTime Now + TimeValue("00:01:00"), "Tempopausa"        '<<< codice funzionante che usavo ma era asincrono
esci:
End Sub


Se avete migliorie sono ben accette

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Sincronizzazione orario

Postdi Anthony47 » 24/02/09 20:03

Non so che cosa fa AvvioStart, ma penso che questa sia equivalente, non so se "migliore":
Codice: Seleziona tutto
Sub MacroTime()
ThisWorkbook.Sheets("Foglio2").Range("C2").Value = "=Now()"
ThisWorkbook.Sheets("Foglio2").Range("C2").NumberFormat = "h:mm;@"
Delay = 62 - Second(Now)
If ThisWorkbook.Sheets("Foglio2").Range("C1").Value > 0 Then Application.OnTime Now + TimeSerial(0, 0, Delay), "MacroTime"
If VariaPausa > 0 Then Application.OnTime Now + TimeSerial(0, 0, Delay), "MacroTime"
'MsgBox (Delay)
End Sub

La macro mette in C2 la formula Adesso() e periodicamente la aggiorna. Devi modificare il nome del foglio su cui esegui l' operazione.

Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Excel - Sincronizzazione orario

Postdi Flash30005 » 25/02/09 00:40

Ciao Anthony,
alcuni passi del tuo codice mi interessano, per esempio come ricavarmi i secondi, (poi, per piacere, mi spieghi perché 62-Second(Now) e non 59-Second(Now), i secondi non vanno da 0 a 59?)
Problema:
La macro non si ferma se la variabile VariaPausa va a 0 (Il mio Stop) mentre si ferma, giustamente, se C1 va a 0
ma C1 potrebbe non andare a 0 e, quindi, pensavo di mettere una schedulazione=false facendo così:
Codice: Seleziona tutto
Sub MacroTime()
Variapausa = ThisWorkbook.Sheets("Foglio2").Range("D1").Value     '<< test per provare se funziona variando da 0 a 1
ThisWorkbook.Sheets("Foglio2").Range("C2").Value = "=Now()"
ThisWorkbook.Sheets("Foglio2").Range("C2").NumberFormat = "hh:mm;@"
Delay = 62 - Second(Now)
NextT = Now + TimeSerial(0, 0, Delay)
If Variapausa > 0 Then
If ThisWorkbook.Sheets("Foglio2").Range("C1").Value > 0 Then Application.OnTime Now + TimeSerial(0, 0, Delay), "MacroTime"
Else
Application.OnTime EarliestTime:=NextT, Procedure:="MacroTime", Schedule:=False
'Application.OnTime Now + TimeSerial(0, 0, Delay), "MacroTime"      '<<<< ho commentato questo per fare delle prove
'MsgBox (Delay)
End If
End Sub

Lancio la macro dal foglio2 e funziona tutto fino a quando non arresto mettendo a 0 la Cella D1 (Variapausa), scade il minuto e mi dà il seguente errore:
Errore Run-time '1004'
Metodo 'OnTime' dell'oggetto '_Application' non riuscito

Che faccio lascio la schedulazione aperta? (mettendo l'etichetta goto esci, come dal codice postato precedentemente e funzionante?)

Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Excel - Sincronizzazione orario

Postdi Anthony47 » 25/02/09 17:36

L' istruzione
If ThisWorkbook.Sheets("Foglio2").Range("C1").Value > 0 Then Application.OnTime Now + TimeSerial(0, 0, Delay), "MacroTime"contenuta nella macro che ti ho postato e' un refuso, nel senso che l' avevo utilizzata per collaudare la macro e poi l' avrei dovuta "sostituire" con l' istruzione basata su VariaPausa; se la togli dovrebbe funzionare.

Perche' 62? Perche' volevo che la macro fosse schedulata qualche secondo dopo l' aggiornamento dell' orologio di sistema.

L' errore 1004 ce l' hai perche' la cerchi di bloccare uno schedule che non esiste; infatti NextT e l' orario di rilancio della macro li calcoli in momenti diversi, quando "Now" e' possibilmente diverso; dovresti usare . . . . Then Application.OnTime NextT, "MacroTime"

Insisti, vedrai che ce la facciamo.
Ciao.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Excel - Sincronizzazione orario":


Chi c’è in linea

Visitano il forum: Nessuno e 38 ospiti