Interrupt/Abort di una VBA-Loop

In VBA su Excel, ho un ciclo su diverse migliaia di cellule, che dura alcuni minuti.

È possibile interrompere un lungo periodo loop (se sì, come) /posso creare un pulsante o qualcosa di simile per interrompere questo ciclo manualmente?

Costruzione di un pulsante e coprite con una macro non è un problema, solo il codice stesso.

Possibile Duplicare: stackoverflow.com/questions/3018286/…
Non si tratta di loop attraverso ogni cellula manualmente? Forse si potrebbe modificare il processo per renderlo più veloce, cioè l’uso di Excel FillDown funzione. Quando sento parlare di “ciclo su diverse migliaia di cellule”, vedo un’opportunità per ottimizzare.
Sry, questo è#possibile, in questo contesto, perché devo controllare le celle manualmente invece 😉

OriginaleL’autore poeschlorn | 2010-07-19

4 Replies
  1. 12

    Quando Excel è occupato eseguire la macro, non rispondere a un pulsante.

    Hai tre opzioni:

    1. Utilizzare Ctrl+Break tasti (al posto di un pulsante)
    2. Fare una macro è molto più veloce (forse l’impostazione Application.ScreenUpdating per
      False aiuterà)
    3. Fare macro
      molto più lento con l’inserimento di un
      DoEvents nel ciclo interno. Questo
      modo, Excel resond a pulsanti
      frattempo. La macro questo pulsante trigger basta impostare una variabile globale True (ovviamente, il vostro ciclo interno dovrebbe controllare questa variabile in ogni iterazione, e uscire se è True).

    OriginaleL’autore

  2. 4

    Applicazione.EnableCancelKey potrebbe essere la cosa si sta cercando.

    Vedere il codice di esempio sul collegamento del url, passando il controllo al gestore di errore quando l’utente preme sfugge.

    OriginaleL’autore

  3. 2

    Oltre ad altre risposte,

    Permette di dire che si desidera rompere il codice e ancora eseguire determinate azioni nel codice, È possibile fare in modo da catturare l’interrupt e la gestione

    È possibile utilizzare Err.Numero per catturare il numero di errore

    In Particolare, Err.Numero = 18 si riferisce all’utente interruzioni

    Sub handleError()
    On Error GoTo MyErrorHandler
     Application.EnableCancelKey = xlErrorHandler
    
     'Just an example to show something is running
     For i = 0 To 900000
     Range("A1") = i
     Next i
    
    MyErrorHandler:
    If Err.Number = 18 Then '18 =User interrupt
         MsgBox " You clicked Ctrl + Break "
         Exit Sub
    
    End If
    End Sub

    OriginaleL’autore

  4. 0

    No, un pulsante non interrompere l’esecuzione di macro. È uno sviluppatore di cosa e di controllo non dovrebbe essere nelle mani dell’utente per impostazione predefinita. Si può provare il seguente combinazione di tasti per interrompere la macro.

    • Ctrl + Pausa/Break
    • Ctrl + bloc scorr
    • Esc + Esc (Premere due volte consecutivamente)

    A volte, il giusto set di chiavi (Pausa, Pausa o bloc scorr) non sono disponibili sulla tastiera (soprattutto accade per gli utenti di laptop) e premendo il tasto Esc 2, 3 o più volte non fermare la macro.

    Mi sono bloccato troppo e alla fine ha trovato la soluzione in funzione di accesso facilitato di Windows, dopo di che ho provato tutti i ricercato opzioni e al di sopra dei 3 di loro ha lavorato per me in 3 diversi scenari.

    Passo #01: Se la tastiera non dispone di un tasto specifico, si prega di non preoccuparti e di aprire la Tastiera su Schermo’ da programmi di Utilità di Windows premendo Vittoria + U.

    Passo #02: Ora, provate l’opzione di cui sopra e di loro sarà sicuramente il lavoro a seconda della vostra architettura di sistema, cioè OS e versione di Office

    Si metterà in pausa la modalità di utilizzo di cui sopra combinazioni di tasti macro sospende l’esecuzione immediatamente finitura l’attività corrente. Per esempio, se si sta ricavando i dati dal web quindi di fermare immediatamente prima di eseguire un qualsiasi comando successivo, ma dopo aver tirato i dati, dopo di che si può premere F5 o F8 per continuare il debug.

    OriginaleL’autore

Lascia un commento