Condividi:        

stop and go

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

stop and go

Postdi giorgioa » 13/01/23 09:37

Salve,

cortesemente qualche rigo di macro da inserire in altra macro.
Spiego, cerco: creo oppure registro una macro, il tempo di elaborazione della macro
potrebbe durare qualche ora per completare l'elaborazione;
mettiamo il caso che vorrei che la macro si fermasse per 5 o 10 secondi e poi si riavvii
senza intervento di comando.
c'è un modo di farlo.

Grazie
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Sponsor
 

Re: stop and go

Postdi Dylan666 » 13/01/23 09:53

Application.Wait (ma dipende molto da cosa deve succedere MENTRE c'è la pausa)
https://software-solutions-online.com/vba-wait-method/
Avatar utente
Dylan666
Moderatore
 
Post: 40100
Iscritto il: 18/11/03 16:46

Re: stop and go

Postdi Anthony47 » 13/01/23 12:22

ma dipende molto da cosa deve succedere MENTRE c'è la pausa
Esattissimo, quindi rimaniamo in attesa della precisazione di giorgioa: cosa vorresti fare mentre la macro e' ferma/sospesa? Piu' in generale, quale problema vorresti risolvere con questo "trucco"?

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

Re: stop and go

Postdi giorgioa » 15/01/23 11:47

Salve,

stavo aspettando la risposta perche non mi è arrivato nessun avviso o sarà stato cancellato con msg spam.

Il quesito: solo fermarsi per 5 oppure 10 secondi e non deve fare niente.

Forse una mia convinzione ma una macro che accumula diversi dati fermandosi scarica dati.

spesse volte quando avvio macro che hanno una certa durata le fermo e vedo, quando le riavvio, che sono più veloci

Voi che dite ? e cmq me lo scrivete un pausa e ripartenza?
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: stop and go

Postdi Dylan666 » 15/01/23 14:40

Secondo me il discorso della pausa che velocizza non regge, comunque dove ti serve metti questa riga per fare una pausa di 10 secondi (riparte da solo):

Application.Wait Now + TimeValue("0:00:10")
Avatar utente
Dylan666
Moderatore
 
Post: 40100
Iscritto il: 18/11/03 16:46

Re: stop and go

Postdi giorgioa » 15/01/23 16:14

Salve Dylan66,
sto provando il codice ma si capisce quando si ferma x 10 secondi?
se per esempio
Application.Wait Now + TimeValue("0:00:10")
mesgbox (pausa)
Application.Wait Now + TimeValue("0:00:10")
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: stop and go

Postdi Dylan666 » 15/01/23 16:35

Metti due MsgBox e il Wait in mezzo e vedrai che lo capisci meglio
Avatar utente
Dylan666
Moderatore
 
Post: 40100
Iscritto il: 18/11/03 16:46

Re: stop and go

Postdi Anthony47 » 15/01/23 20:37

Non credo che "far respirare" il pc per qualche secondo velocizzi le macro, quindi penso che questo esercizio sia inutile.

Comunque, immaginiamo che la tua macro abbia un loop; dobbiamo inserire nel loop un "ritardo temporizzato".
Ad esempio:
1) Per cominciare inserisci questa Subroutine in un Modulo standard del vba:
Codice: Seleziona tutto
Sub myWait(myStab As Single)
Dim myStTiM As Single
'Wait loop
    myStTiM = Timer
    Do          'wait myStab
        DoEvents: DoEvents: DoEvents
        If Timer > (myStTiM + myStab) Or Timer < myStTiM Then Exit Do
    Loop
End Sub

Questa sara' la Sub che inserisce il ritardo; non ho voluto usare Application.Wait, che e' un "congelamento" del pc quindi tempo sottratto a qualsiasi elaborazione, per evitare che la cosa oltre che inutile fosse pure dannosa.


2) Andiamo nella Sub su cui intervenire
-inserisci queste variabili tra le tue dichiarazioni, in testa alla sub
Dim myTim As Single, Ogni As Single, Attendi As Single

-Prima dell'inizio del loop dichiariamo i parametri del processo: Periodo tra una attesa e la successiva, durata dell'attesa.
-Subito dopo l'inizio del loop inseriamo le istruzioni che richiamano l'attesa
In codice:
Codice: Seleziona tutto
Ogni = 300                  '<<< Ogni quanti secondi va inserito il ritardo
Attendi = 5                 '<<< La durata del ritardo
myTim = Timer
For I = 2 To LastR              'ipotizziamo che questo sia l'inizio del tuo loop
'Aggiungere >>
    If (Timer - myTim) > Ogni Then
        myWait Attendi
        myTim = Timer
''        Debug.Print Timer
    End If
'<< termine delle aggiunte
    'il tuo codice
    'il tuo codice

Con questi parametri, ogni 300 sec verra' inserito un ritardo di 5 secondi; modifica i parametri (le istruzioni marcate <<<) a piacimento

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

Re: stop and go

Postdi giorgioa » 19/01/23 15:24

Salve, Anthony

per modulo STANDARD intendi NON il modulo nominato foglio1, foglio2, ecc

" un chiarimento ma non per contraddirvi Dylan66, e in fin dei conti la mia non è altro
che una convinzione e non una affermazione.
La mia convinzione sta in questo Voi con il VBA da programma io con il VBA registrato
con formula da riempire centinaia di celle.
Il VBA programma stampa il risultato e si scarica di quel dato mentre le formule no"

E' una mia convinzione.
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: stop and go

Postdi Anthony47 » 19/01/23 17:03

per modulo STANDARD intendi NON il modulo nominato foglio1, foglio2, ecc
Corretto come hai capito:
-i moduli che in genere si chiamano Foglio1, Foglio2 etc e' opportuno lasciarli per la sola gestione degli eventi dei rispettivi fogli
-i "moduli standard" si aggiungono tramite Menu /Inserisci /Modulo e in origine si chiamano Modulo1, Modulo2 etc
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: stop and go

Postdi giorgioa » 19/01/23 17:47

la variabile LastR l'ho indicata con Byte dimmi come cambiarla;

la sto provando ma appena avvio la macro pareva si fosse fermata per un attimo

invece chiude la macro
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00

Re: stop and go

Postdi Anthony47 » 20/01/23 01:51

Non so se siamo sulla stessa lunghezza d'onda...

Io avevo ipotizzato che la tua macro durasse molto tempo perche' avevi dei loop che ripetevano un tot di istruzioni; in questo caso, dovresti avere NEL TUO CODICE una riga simile a For I = 2 To LastR dove agganciarti per inserire il blocco indicato con 'Aggiungere >> / '<< termine delle aggiunte

Se invece non hai dei loop, cioe' dei cicli di istruzione che si ripetono, ma hai un elenco lunghissimo di istruzioni che non si ripetono in loop allora quel codice che t'avevo dato non hai dove inserirlo.
Seguiamo allora il suggerimento di Dylan: metti ogni tanto la riga Application.Wait (Now + TimeValue("0:00:01")) che ritarda di 1 secondo (modifica il TimeValue a piacere per avere stop piu' lunghi) e sei a posto (nel senso che hai ottenuto quel che cercavi; che serva o meno lo puoi verificare solo tu)
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19436
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: stop and go

Postdi giorgioa » 21/01/23 08:07

Grazie della pazienza

Buona Giornata :D
giorgioa
Utente Senior
 
Post: 773
Iscritto il: 16/04/12 15:00


Torna a Applicazioni Office Windows


Topic correlati a "stop and go":


Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti