2015-07-31 11 views
5

Sto leggendo su come usare On Error Resume Next e sto cercando di capire per quanto tempo quella linea si applicherà al programma. Sul sito di Microsoft, ho trovato questa frase: "An On Error Resume Next l'istruzione diventa inattiva quando viene chiamata un'altra procedura." Cosa significa esattamente questo? Che cosa è considerata una procedura?VBA: Quanto dura On Error Resume Next?

Chiedo perché sto usando la linea nel mio programma, ma non lo voglio a Resume Next tutti gli errori di runtime che si verificano, solo l'ovvio sulla riga successiva.


Codice: Dim zRange come gamma

Call FilterTableFor(fieldNameColumn, Array("baseunitprice", "burden", "MTLBURRATE", "PurPoint", "Vendornum")) 

On Error Resume Next 
Set zRange = commentsColumnRange.SpecialCells(xlCellTypeVisible) 
zRange.Formula = "target" 

Call FilterTableFor(fieldNameColumn) 

Ho anche scoperto (e conosco da un po ') che On Error o GoTo linee sono considerati poveri di codifica. C'è un Try-Catch che posso usare per una linea come questa?

Sto pensando qualcosa di simile:

Dim zRange As Range 

Call FilterTableFor(fieldNameColumn, Array("baseunitprice", "burden", "MTLBURRATE", "PurPoint", "Vendornum")) 

Try 
Set zRange = commentsColumnRange.SpecialCells(xlCellTypeVisible) 
zRange.Formula = "target" 
Catch() 

Call FilterTableFor(fieldNameColumn) 

Dove non so nemmeno fare qualsiasi cosa con esso, come non mi sento un bisogno.

Grazie per il vostro tempo.

+1

Usando 'On Error ...' non è "considerato povero di codifica". Lo sta usando solo * male *. Non c'è "Try ... Catch' in VBA. –

+0

@TimWilliams VBA non segue tutte le regole di Visual Basic? – Tawm

+0

VBA è basicamente VB6. Non è VB.NET – MatthewD

risposta

2

Si desidera solo utilizzare "On Error Resume Next" quando

  1. Sai perché si verifica l'errore.

  2. Si sa che non interesserà altre parti del codice.

  3. Si utilizza "On Error Goto 0" immediatamente dopo il codice in cui si verifica l'errore.

Detto questo, non si dovrebbe quasi mai usarlo. Dovresti capire perché l'errore si verifica e il codice per gestirlo.

Quello che il sito dice è che una volta che sei fuori dal sottotitolo o dalla funzione che lo ha chiamato, il successivo non sarà più in effetto e i tuoi errori aumenteranno come dovrebbero.

Un'alternativa migliore è utilizzare goto in questo modo. Ma alcune persone disapprovano questo quasi altrettanto.

sub SomeSub() 
    On Error Goto TestFailed 

    'Some code 

    'Some code 

    'Some code 

Exit sub 

TestFailed: 
    'Some code here to alert you to and/or handle the fallout of the error. 
End sub 
+0

Così, al fine di ignorare una singola linea, dovrei fare qualcosa di simile: 'On Error Resume Next' ' errore Codice delle 'On Error Goto 0 ' wow che è brutto, ma si ottiene l'idea – Tawm

+0

Sì On Errore riprendi Avanti - quindi la riga di codice - quindi On Error Goto 0. Ma controlla gli avvertimenti. Non dovresti abituarti ad usarlo. Se ricevi un errore particolare. Pubblica il tuo codice qui allo stack overflow e la community può aiutarti a capire come codificarlo. – MatthewD

+0

Se il programma fosse più grande, avrei capito come correggere l'errore. Questo potrebbe probabilmente essere scritto in ~ 30 righe, quindi mi sento di aggiungere 3-10 linee per risolvere il problema è una perdita di tempo. Grazie comunque! :) – Tawm

0

non si sempre bisogno di un po 'di codice per gestire un errore, ma si dovrebbe davvero fare qualcosa con esso. Forse basta che il tuo codice cambi la proprietà cells.font.color in vbRed. Fare semplicemente On Error Resume Next (a line of code that might error) On Error Goto 0 è una forma terribilmente scadente.

E, come altri hanno sottolineato, On Error Goto Label è essenzialmente la versione di VBA di Try ... Catch, e lo uso frequently

0

per rispondere alla tua domanda "Da quanto tempo non On Error Resume lavoro successivo?"

La risposta è: fino a quando la prossima definizione di On error ...

Quindi, se si definisce un On error resume next, si salta ogni errore fino a quando si definisce un On error goto 0 o On error goto label

5

ENTITÀ ON ERROR... DICHIARAZIONE

L'effec5 di ON ERROR ... termina non appena si verifica una delle seguenti condizioni:

  1. Altro ON ERROR .... (Forse sotto forma di ON ERROR RESUME x o ON ERROR GOTO x)
  2. Exit Sub/Exit Function all'interno della stessa sotto/funzione dove definito.
  3. End Sub/End Function del sotto/funzione dove definito.

È ESENTE DA USARE ON ERROR RESUME NEXT?

Sì e No.

direi non utilizzare senza sapere quale sarebbe l'effetto di questa affermazione. Evitare se possibile. Mantieni la portata corta ovunque non sia possibile.

per annullare l'effetto di un ON ERROR RESUME NEXT dichiarazione, è possibile chiamare ON ERROR GOTO 0

+0

Riferimento fonte per favore? – Roland

+0

Non ho alcun riferimento di origine. La risposta è basata sulla mia esperienza. Il modo migliore per verificare è provarlo tu stesso.:) –

+1

@PradeepKumar Essere dopo un elenco non era il problema; il problema era che avevi degli spazi tra i marcatori "**" e il testo tra loro. –

Problemi correlati