Condividi:        

[vba] utilizzare più volte on error

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

[vba] utilizzare più volte on error

Postdi ramset1978 » 23/01/13 20:36

Ho notato che se si utilizza più volte l'istruzione on error non funziona, mi spiego:
io dovrei utilizzare l'istruzione on error per verificare se esistono dei file oppure no. Se il codice trova il file prosegue, se invece non lo trova lo indirizzo verso un altro codice da eseguire, non posso quindi utilizzare on error resume next, esempio:

On Error GoTo GestisciErr1
Workbooks.Open NomeFile1
msgbox("file1 trovato")
goto Trovato1

GestisceErr1:
msgbox("file1 non trovato")
goto NonTrovato1

On Error GoTo GestisciErr2
Workbooks.Open NomeFile2
msgbox("file2 trovato")
goto Trovato2

GestisceErr2:
msgbox("file2 non trovato")
goto NonTrovato2

Il codice funziona perfettamente nella gestione del primo eventuale errore mentre da errore se entrambi i file non vengono trovati.... qualche suggerimento?
Grazie :)
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Sponsor
 

Re: [vba] utilizzare più volte on error

Postdi Anthony47 » 24/01/13 01:46

Guarda questa discussione: viewtopic.php?p=564067#p564059

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

Re: [vba] utilizzare più volte on error

Postdi ramset1978 » 24/01/13 09:11

Anthony l'istruzione resume o resume next l'avevo già valutata, ma qualcosa non mi torna... copio il pezzo di codice che effettivamente mi serve.

Codice: Seleziona tutto
File1:
If Report = 0 Or Report = 1 Then
On Error GoTo GestisciErr1
Workbooks.Open NomeFile1
 ' se il file NomeFile1 esiste il codice prosegue
 MsgBox ("File1 elaborato")
 ' e dopo aver elaborato il file assegna il valore 1 alla variabile x1
x1 = 1
GoTo EsciFile1
End If

GestisciErr1:
'se il file non è stato trovato assegna il valore 0 alla variabile x1
x1 = 0
EsciFile1:


File2:
If Report = 0 Or Report = 2 Then
On Error GoTo GestisciErr2
Workbooks.Open NomeFile2
 ' se il file NomeFile2 esiste il codice prosegue
 MsgBox ("File2 elaborato")
 ' e dopo aver elaborato il file assegna il valore 1 alla variabile x2
x2 = 1
GoTo EsciFile2
End If

GestisciErr2:
'se il file non è stato trovato assegna il valore 0 alla variabile x2
x2 = 0
EsciFile2:


Con le istruzioni resume e resume next non riesco a farlo funzionare, probabilmente sbaglio io. Nella migliore delle ipotesi infatti l'errore viene gestito in entrambi i casi ma le variabili x1 ed x2 assumo valore errati.
Grazie, ciaoo
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Re: [vba] utilizzare più volte on error

Postdi Anthony47 » 24/01/13 10:21

No, non devi usare Resume Next, ma devi uscire dalla routine di gestione errore tramite una "Resume QualcheCosa"
Nel caso del codice che hai pubblicato, mi pare che in caso di "errore1" il tutto si chiude con l' impostazione X=0; pertanto bastera' modificare in
Codice: Seleziona tutto
GestisciErr1:
'se il file non è stato trovato assegna il valore 0 alla variabile x1
x1 = 0
Resume EsciFile1   'Termina la gestione errore
'Stop     
EsciFile1:
Per il secondo blocco articolerai il flusso in modo analogo.

La spiegazione dell' uso del Resume e' contenuta nell' help on line di On Error, che a un certo punto recita:
L' help on line del vba ha scritto:Un gestore degli errori viene "abilitato" quando viene attivato da un'istruzione On Error ed è "attivo" durante la fase di gestione dell'errore. Se viene generato un errore mentre un gestore di errori è attivo, ovvero tra il verificarsi dell'errore e l'esecuzione di un'istruzione Resume, Exit Sub, Exit Function o Exit Property, il gestore di errori della routine corrente non potrà gestire l'errore e il controllo tornerà alla routine chiamante

Da questo si deduce che la routine di gestione errore viene considerata terminata solo con istruzioni del tipo Resume, Exit Sub, Exit Function o Exit Property.

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

Re: [vba] utilizzare più volte on error

Postdi ramset1978 » 24/01/13 10:30

No, ci sta ancora qualcosa che non va... se modifico il codice come suggeriscie, l'errore viene gestito bene ma se il file1 viene trovato Resume EsciFile1 da errore (resume senza error).
:)
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Re: [vba] utilizzare più volte on error

Postdi Flash30005 » 24/01/13 10:58

Ma perché non usare il codice che permette di sapere se il file esiste o no?
es.:
Codice: Seleziona tutto
If Dir("Percorso completo + nomefile") <> "" Then
MsgBox "File Esiste"  '<<<< fai fare quello che deve fare con il file
Else
MsgBox "File non esiste"  '<<<< fai fare quello che deve fare in assenza di file
End If


Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: [vba] utilizzare più volte on error

Postdi Anthony47 » 24/01/13 13:28

Per ramset1978:
Io non so che cosa devi fare e come hai pensato logicamente di farlo, per cui non so come come rivedere lo spezzone di codice.
Nel piccolo (nel codice pubblicato), dico che e' sbagliato che tu entri nella gestione errore senza che ci sia stato errore.
Devi quindi rivedere il flusso della macro, separando la normale gestione dalla gestione degli errori; nella gestione errori userai il "Resume QualcheCosa" per terminare la logica di gestione errore e riprendere al punto giusto che l' errore ti consente.

Il trucco di Flash (vedi sopra) potrebbe aiutarti nel caso specifico, ma questo non significa (secondo me) che On Error non ti servira' mai, per cui prima poi devi affrontarlo di petto.

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

Re: [vba] utilizzare più volte on error

Postdi ramset1978 » 24/01/13 18:43

Per Flash30005: Semplicemente perchè non conoscevo questa possibilità. Credo risolva definitivamente il problema, grazie mille.
Per Anthony: Ho capito cosa dici, bisogna far in modo di non entrare nella gestione dell'errore senza che ci sia stato. A naso direi che l'unico modo è spostare quella parte di codice in una macro diversa e richiamarla in caso di errore... o almeno cosi credo ;)
Grazie, saluti a tutti.
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano

Re: [vba] utilizzare più volte on error

Postdi Anthony47 » 24/01/13 21:56

Hai capito bene, ma l' attuazione l' hai pensata male :D
Le istruzioni per la gestione errori deve essere all' interno della stessa macro in cui si potrebbe generare l' errore; ad esempio:
Codice: Seleziona tutto
Sub macroZZ()
..
on Error goto GErr1
Istruzione
...
istruzione
Rientro1:
On Error Goto Gerr2
istruzioni
...
istruzioni
Rientro2:
istruzioni
...
Exit Sub
Gerr1:
Istruzioni su errore 1
...
Resume Rientro1
'
Gerr2
istruzioni su errore 2
...
Resume Rientro2
'
End Sub

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

Re: [vba] utilizzare più volte on error

Postdi ramset1978 » 24/01/13 22:00

Anthony47 ha scritto:Hai capito bene, ma l' attuazione l' hai pensata male :D

Ciao

No, l'ho capita tardi ;)
Grazie, ciaoo
Ramset1978
Win 7 + Office 2010 Ita
ramset1978
Utente Senior
 
Post: 223
Iscritto il: 25/03/12 16:04
Località: Avezzano


Torna a Applicazioni Office Windows


Topic correlati a "[vba] utilizzare più volte on error":


Chi c’è in linea

Visitano il forum: Marius44 e 47 ospiti