Pergunta

Estou seguindo instruções sobre como criar um novo procedimento VBA no Access.Uma das especificações é usar o tratamento ExitProc-Error padrão.Fiquei um pouco confuso sobre o que era isso, mas olhei exemplos on-line e exemplos previamente preenchidos fornecidos como modelo, descobri o seguinte:

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 é uma variável booleana que marquei como falsa no procedimento para indicar um erro e FindFolderPaths é o nome do procedimento que estou usando como uma indicação se os caminhos foram encontrados.Quando executo este procedimento, as seguintes caixas de mensagens aparecem.Criei um erro no nome da pasta para mostrar como o erro seria tratado:

-Pastas necessárias para ICPMS não encontradas

-0 em FindFolderPaths

-Pastas necessárias para ICPMS não encontradas

-20 Retomar sem erro em FindFolderPaths

Quando executei o procedimento passo a passo, parece que ele está percorrendo HandleError duas vezes antes de ir para ExitProc e não consigo entender o porquê.Além disso, a mensagem de erro muda durante o segundo loop em HandleError, o que é estranho.

Foi útil?

Solução

Seu problema parece ser que você está "usando mal" o manipulador de erros, chamando-o diretamente em seu código usando Goto HandleError em vez de ser chamado automaticamente quando ocorre um erro.

Isso explicaria exatamente o que você relatou quando seu código foi executado:

-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 então aciona um real erro, chamando o código uma segunda vez

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

Normalmente, se houver alguma condição que você possa testar (como uma pasta ausente), você não precisará lidar com isso chamando um manipulador de erros - você pode mostrar uma mensagem do seu código "normal" e então apenas Exit function.Como alternativa, gere um erro personalizado usando Err.Raise, fornecendo um número de erro específico e uma descrição que você pode testar e tratar adequadamente em seu manipulador de erros.

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

Outras dicas

Remover currículo ExitProc.O código sairá da função quando atingir End Function.Além disso, você precisa remover os parênteses ao chamar MsgBox.Use parênteses apenas quando estiver definindo algo igual a MsgBox.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top