Domanda

Sto seguendo le istruzioni sulla creazione di una nuova procedura VBA in Access.Una delle specifiche è utilizzare la gestione ExitProc-Error standard.Ero un po' confuso su cosa si trattasse, ma ho guardato gli esempi online e quelli precedentemente completati forniti come modello, e ho pensato a questo:

On Error GoTo HandleError
'code that may cause errors

ExitProc:
Exit Function
HandleError:
If FindFolders = False Then
    MsgBox ("Required folders for " & InstrumentName & " not found")
ElseIf FindFolderPaths = False Then
    MsgBox ("Required folder paths for " & InstrumentName & " not found")
End If

MsgBox Err.Number & " " & Err.Description & " in FindFolderPaths"
Resume ExitProc
End Function

findfolders è una variabile booleana che ho contrassegnato come false nella procedura per indicare un errore e FindFolderPaths è il nome della procedura che sto utilizzando per indicare se i percorsi sono stati trovati.Quando eseguo questa procedura vengono visualizzate le seguenti caselle di messaggio.Ho creato un errore nel nome della cartella per mostrare come sarebbe stato gestito l'errore:

-Cartelle richieste per ICPMS non trovate

-0 in TrovaPercorsiCartella

-Cartelle richieste per ICPMS non trovate

-20 Riprendi senza errori in FindFolderPaths

Quando ho seguito la procedura passo dopo passo, sembra che stia eseguendo il loop HandleError due volte prima di andare a ExitProc e non riesco a capire perché.Anche il messaggio di errore cambia durante il secondo ciclo in HandleError, il che è strano.

È stato utile?

Soluzione

Il tuo problema sembra essere che stai "utilizzando in modo improprio" il gestore degli errori chiamandolo direttamente nel tuo codice using Goto HandleError invece di chiamarlo automaticamente quando si verifica un errore.

Questo spiegherebbe esattamente ciò che riporti è stato restituito durante l'esecuzione del codice:

-Required folders for ICPMS not found  'shows regardless of what triggers the handler
-0 in FindFolderPaths                  'err number of zero means there's no error

Resume Exit Proc quindi attiva un effettivo errore, richiamando il codice una seconda volta

-Required folders for ICPMS not found        'not relevant here...
-20 Resume without Error in FindFolderPaths  'an actual error number and message

In genere, se c'è qualche condizione che puoi verificare (come una cartella mancante), non è necessario gestirla chiamando un gestore di errori: puoi mostrare un messaggio dal tuo codice "normale" e poi semplicemente Exit function.In alternativa, genera un errore personalizzato utilizzando Err.Raise, assegnandogli un numero di errore e una descrizione specifici che puoi testare e gestire in modo appropriato nel tuo gestore degli errori.

http://msdn.microsoft.com/en-us/library/office/aa164019(v=office.10).aspx#odc_tentipsvba_topic3

Altri suggerimenti

Rimuovere il curriculum exitproc.Il codice lascerà la funzione quando colpisce la funzione finale.Inoltre, è necessario rimuovere le parentesi quando stai chiamando MSGBOX.Utilizzare solo le parentesi quando si imposta qualcosa uguale a MsgBox.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top