Risolto Opzione STOP macro in esecuzione (se ignoro prosegue)

Bax

Utente abituale
2 Maggio 2021
243
30
Udine
www.simracingleague.it
Pro 2016
25
Spiego il titolo

Mi è capitato un caso recente (https://www.forumexcel.it/forum/threads/gestione-output-di-una-funzione-calcolo.50366/#post-400494) in cui la richiesta era di rendere "continuo" un determinato calcolo. Da una singola esecuzione chiamata da pulsante a una esecuzione multipla prendendo i dati da una tabella.
Considerando il numero di calcoli da iterare e la durata di un singolo ciclo di calcolo, è facile supporre ore e ore di occupazione del PC (se non si procede a "pezzi") e però, in caso ci si renda conto di un errore di impostazione o di risultati, l'unica via per fermare il tutto è chiudere Excel.

Io vorrei trovare un modo funzionale (e magari esterticamente "umano" ma non è fondamentale) per permettere all'utente di fermare l'esecuzione del ciclo di calcolo magari dopo tot calcoli, tot righe, tot colonne, tot qualcosa...
Nel caso in esame, per come è stata costruita la macro, l'utente avrebbe almeno messo in salvo i risultati ottenuti fino a quel punto. Decida lui poi se salvarli e continuare togliendo alcuni dati dalla tabella iniziale oppure rifare tutto.

Inserisco allora nella macro, nel punto ritenuto valido, un codice che manda un messaggio a video per chiedere all'utente se vuole continuare o meno. Contemporaneamente faccio partire un timer: se l'utente non risponde entro 5-10 secondi il messaggio sparisce e il calcolo continua, fino al prossimo punto di "interruzione"/conferma.

Mi risulta che le MSGBOX non siano chiudibili da VBA, quindi magari si potrebbe ricorrere a una USERFORM che invece lo è.

Il sistema dovrebbe teoricamente funzionare.

Ma ci sono altri metodi già collaudati e magari più immediati? 2 righette di codice e sparisce la bua? :dubbioso:
 

Bax

Utente abituale
2 Maggio 2021
243
30
Udine
www.simracingleague.it
Pro 2016
25
Ho provato anche inserendo un pulsante di STOP (nel foglio attivo quando si eseguono i calcoli) di tipo ActiveX così che posso intercettare la sua pressione e settare una variabile (globale) boolean che mi ferma il processo.

Funziona anche questo
 

Rubik72

Excel/VBA Expert
Supermoderatore
12 Dicembre 2015
11.319
845
49
Cosenza
Excel 2016
932
Ciao, io inserirei una ProgressBar (UserForm) con il tasto ANNULLA, così facendo l'utente non deve attendere alcuna MsgBox e può annullare quando vuole.
 
  • Like
Reactions: Bax

dodo47

Utente abituale
Expert
18 Ottobre 2020
988
75
excel 2016
139
Mi risulta che le MSGBOX non siano chiudibili da VBA, quindi magari si potrebbe ricorrere a una USERFORM che invece lo è.
Ciao
No, lo sono.

Il seguente esempio chiude un msgbox dopo 5 (da variare) secondi....

saluti

Codice:
Sub MsgBoxAutoClose()
    Dim mTime As Integer, mInfo As Object
    Set mInfo = CreateObject("WScript.Shell")
    mTime = 5 'secondi di attesa
    Select Case mInfo.Popup("Click OK (oppure il msgbox si chiude dopo 5 secondi).", _
    mTime, "Tuo Messaggio", 0)
        Case 1
            Exit Sub
    End Select
End Sub
Edit:
ho corretto:
Case 1 (non Case 1, -1)


In tal modo se non premi nulla, il msgbox sparisce, mentre se premi OK, al posto di exit sub metti quello che devi fare.

In poche parole se premi OK il codice passa tramite l'exit Sub da sostituire con quanto ti serve.

Spero di essermi spiegato
 
Ultima modifica:
  • Like
Reactions: Bax

Bax

Utente abituale
2 Maggio 2021
243
30
Udine
www.simracingleague.it
Pro 2016
25
Finalmente ho avuto la possibilità di provare con calma la soluzione di dodo47 @dodo47

A me pare che non ci sia niente nel codice che mi fa sparire la MSGBOX dopo un tempo stabilito... e infatti quel messaggio rimane a schermo fino a che non premo OK

EDIT: ho trovato info sul comando "WScript.Shell.Popup" ed effettivamente dovrebbe funzionare... ora devo capire perchè no

RI-EDIT: capito... non avevo compreso bene "...exit Sub da sostituire con quanto ti serve "


Bene, direi che per i miei scopi funziona senza complicarsi la vita con form etc... che invece vanno benissimo quando magari devi fare qualcosa di pro ';)

Grazie ad entrambi !
 
Ultima modifica:

Sostieni ForumExcel

Aiutaci a sostenere le spese e a mantenere online la community attraverso una libera donazione!