Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Ciao Edoardo,
Grazie a Daniele e a Norman per la disponibilità e la sollecitudine; non mi aspettavo risposte il giorno di Pasquetta. A Daniele chiedo un poco di pazienza perché risponderò prima a Norman.
Ho provato a scaricare il file ma dà errore di runtime 1004 sulla riga application.ontime.......
Ma questo non è un problema. Preferisco riportarti il semplice contenuto della macro che gira con successo ma dà l'errore dopo 5 secondi dall'apertura della cartella. Il problema indica chiaramente che o Excel o più probabilmente Microsoft non trovano la macro allo scadere dei 5 secondi. Se a te funziona bisognerà indagare all'esterno della macro. Penso.
Option Explicit
Private Sub Workbook_Open()
Application.OnTime Now + TimeValue("00:00:05"), "lampeggia", , True
End Sub
'
Public Sub lampeggia()
answer = MsgBox("Sono le " & Now, vbQuestion + vbYesNo)
If answer = True Then
Application.OnTime Now() + TimeValue("00:00:05"), "lampeggia", , True
Else
Application.OnTime Now() + TimeValue("00:00:05"), "lampeggia", , False
End Sub
E questo è l'errore: "impossibile eseguire la macro "C:\User\edoar\Desktop\prova.xlsm'!lampeggia'. E' possibile che tale macro non sia disponibile nella cartella di lavoro o che tutte le macro siano disattivate".
A parte il fatto che la tua procedura lampeggia è mancante e l'istruzione End If, non mi è chiaro quale azione vuoi che questa procedura esegua poiché non sono indicate azioni diverse da una chiamata ricorsiva alla procedura stessa.
Pertanto, prova a sostituire il codice nel modulo Thisworkbook con:
'========>>
Option Explicit
'-------->>
Private Sub Workbook_Open()
Call StartTimer
End Sub
'-------->>
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call StopTimer
End Sub
'<<========
Nota che la procedura Workbook_BeforeClose è obbligatoria poiché la cartella di lavoro verrà riaperta automaticamente se viene chiusa senza terminare l'operazione OnTime.
Nel tuo modulo standard, incolla qualcosa del genere:
'========>>
Option Explicit
Public RunWhen As Double
Public Const cRunIntervalSeconds = 5 '\ 5 Secondi
Public Const cRunWhat = "lampeggia"
'-------->>
Public Sub StartTimer()
RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)
Application.OnTime RunWhen, cRunWhat, , True
End Sub
'-------->>
Public Sub StopTimer()
On Error Resume Next
Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, \_
Schedule:=False
End Sub
'-------->>
Public Sub lampeggia()
Dim Rng As Range
Dim answer As VbMsgBoxResult
Set Rng = ThisWorkbook.Sheets(1).Range("A1")
answer = MsgBox("Sono le " & Now, vbQuestion + vbYesNo)
If answer = vbYes Then
'\\ Fai qualcosa; ad esempio:
Rng.Font.Color = IIf(Rng.Font.Color = vbRed, vbGreen, vbRed)
Call StartTimer
Else
ThisWorkbook.Sheets(1).Range("A1").Font.Color = vbBlack
Call StopTimer
End If
End Sub
'<<========
Con questo codice viene avviata l'operazione OnTime e, ogni 5 secondi, il colore del carattere della cella A1 del primo foglio scorre tra il rosso e il verde. Quando la procedura viene interrotta, rispondendo No al messaggio, il colore del carattere cambia in nero.
Ovviamente, puoi sostituire le azioni relative al colore dei caratteri con un'azione più adatta alle tue esigenze. Tuttavia, metterei in dubbio l'uso di un MsgBox che viene mostrato ogni 5 secondi!
In ogni caso per me il codice funziona senza problemi e puoi scaricare il mio file di prova Edoardo2_20220418.xlsm
===
Regards,
Norman