Condividi tramite

VBA Excel

Anonimo
2022-04-18T10:04:22+00:00

Buongiorno, scrivo in relazione alla richiesta di Pasquale Prudente del 29 agosto 2020 ed ai suggerimenti di Norman David Jones. Ho un problema che si manifesta in maniera identica a quella proposta. Ho seguito i consigli di Norman creando appositamente una cartella di prova contenente un solo foglio completamente vuoto e inserendo il codice nella Macro Workbook_Open in Questa_cartella_di_lavoro. Ciò nonostante non sono riuscito a risolvere il problema, né Pasquale dice come ha risolto. Utilizzo Windows 10, Office 2021 e le macro sono tutte abilitate. Per esperienza, escluderei il codice come origine del problema, ritenendolo dovuto piuttosto ad una impostazione di Excel o di Windows Se necessario posso fornire anche il codice o l'intera cartella. Gradirei un aiuto. Grazie

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2022-04-18T15:39:21+00:00

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

Immagine

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

7 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2022-04-18T13:26:38+00:00

    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".

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2022-04-18T11:55:41+00:00

    Ciao Edoardo,

    Potresti scaricare il mio file di prova Edoardo20220418.xlsm

    Aprendo questo file il messaggio verrà avviato e ripetuto ogni 15 secondi fino alla chiusura della cartella di lavoro o alla pressione del pulsante su Foglio1.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2022-04-18T11:29:02+00:00

    Ciao Edoardo,

    Buongiorno, scrivo in relazione alla richiesta di Pasquale Prudente del 29 agosto 2020 ed ai suggerimenti di Norman David Jones. Ho un problema che si manifesta in maniera identica a quella proposta. Ho seguito i consigli di Norman creando appositamente una cartella di prova contenente un solo foglio completamente vuoto e inserendo il codice nella Macro Workbook_Open in Questa_cartella_di_lavoro. Ciò nonostante non sono riuscito a risolvere il problema, né Pasquale dice come ha risolto. Utilizzo Windows 10, Office 2021 e le macro sono tutte abilitate. Per esperienza, escluderei il codice come origine del problema, ritenendolo dovuto piuttosto ad una impostazione di Excel o di Windows Se necessario posso fornire anche il codice o l'intera cartella. Gradirei un aiuto. Grazie

    Riconosco il file di Pasquale.

    Per approfondire il tuo problema:

    • Apri una nuova cartella di lavoro
    • Alt+F11 per aprire l'editor di VBA
    • Alt+IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

    '========>>

    Option Explicit

    Public RunWhen As Double

    Public Const cRunIntervalSeconds = 15

    Public Const cRunWhat = "allarme"

    '-------->>

    Public Sub allarme()

    MsgBox "Attenzione, raggiunto orario" 
    
    Call allert 
    

    End Sub

    '-------->>

    Public Sub allert()

    RunWhen = Now + TimeSerial(0, 0, cRunIntervalSeconds)

    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, _

        Schedule:=True 
    

    End Sub

    Sub StopTimer()

    On Error Resume Next 
    
    Application.OnTime EarliestTime:=RunWhen, Procedure:=cRunWhat, \_ 
    
        Schedule:=False 
    

    End Sub

    '<<========

    • Ctrl+R per accedere alla finestra Project Explorer ('Gestione progetti')
    • Fai doppio clic sul modulo ThisWorkbook (Questa_cartella_di_Lavoro) del file e incolla il seguente codice:

    '========>>

    Option Explicit

    '-------->>

    Private Sub Workbook_Open()

    Call allert 
    

    End Sub

    '-------->>

    Private Sub Workbook_BeforeClose(Cancel As Boolean)

    Call StopTimer 
    

    End Sub

    '<<========

    Vai nel modulo di codice ThisWorkbook (Questa_cartella_di_lavoro) , seleziona la procedura Workbook_Open e premi F5 per eseguirla.

    In questo modo dovresti ricevere un messaggio ogni 15 secondi. Per terminare i messaggi, eseguire la procedura StopTimer. Quest'ultima procedura verrà chiamata automaticamente alla chiusura della cartella di lavoro.

    Fammi sapere i risultati che ricevi.

    ===

    Regards,

    Norman

    Immagine

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2022-04-18T10:41:44+00:00

    Ciao Edoardo,

    qui Daniele, bentrovato nella community Microsoft,

    puoi mettere un link di riferimento alla domanda in questione o spiegare il problema? Non è facile sul forum ritrovare una domanda di 2 anni fa.

    La risposta è stata utile?

    0 commenti Nessun commento