Convidado 7/1/2013, 19:08
Ei é que está... Eu estou justamente querendo evitaro select case ou o if...
Automatizar todo o processo: O tratamento de erros, Veja:
Function LogError(ByVal lngErrNumber As Long, ByVal strErrDescription As String, _
strCallingProc As String, FormName As String, Linha, Optional vParameters, Optional bShowUser As Boolean = True) As Boolean
10 On Error GoTo Err_LogError
Dim ExecutaErro As String
'Objetivo: manipulador de erro genérico.
'Registra erros para "tblLogErros" da tabela.
'Argumentos: lngErrNumber - valor de Err.Number
'StrErrDescription - valor de Err.Description
'StrCallingProc - nome da sub | função que gerou o erro.
'VParameters - String opcional: Lista de parâmetros para gravar.
'BShowUser - boolean opcional: Se for False, suprime a exibição.
'Autor: Allen Browne, allen@allenbrowne.com
'Adaptado por PILOTO (Fórum Máximo Access em 07/01/2013 - Harysohn@hotmail.com
Dim StrMsg As String ' String for display in MsgBox
Dim rst As DAO.Recordset ' The tLogError table
20 Select Case lngErrNumber
'Aqui vai o numero do erro, que caso exista em uma tabela, eu filtro: NumeroErro x NomeObjeto, e encontrando extraio a acao a ser executada para este erro
' Convém lembrar que um mesmo erro pode ocorrer por fatores diferentes que dependendo do caso tem uma acao: MsgBox ou Resume Next ou Exit Sub etc..
'Esses erros estarao gravados em uma tabela e com a acao esperada..
'Erro X no Botão Y = Acao W
'Erro X no Botao N = Acao T
Case NumeroErro
30 Debug.Print strCallingProc & " called error 0."
' NomeErro
40 Case 2501 ' Cancelado
'Do nothing.
50 Case 3314, 2101, 2115 ' Não é possível salvar.
60 If bShowUser Then
70 StrMsg = "O Registro não pode ser salvo no momento." & vbCrLf & _
"Completar a entrada, ou pressione para desfazer."
80 MsgBox StrMsg, vbExclamation, strCallingProc
90 End If
100 Case Else
110 If bShowUser Then
120 StrMsg = "Erro Gerado no: " & FormName & "" _
& vbNewLine & "Erro Número: " & lngErrNumber _
& vbNewLine & "Procedimento: " & CurrentProcName() _
& vbNewLine & "linha: " & Linha _
& vbNewLine & "Descrição: " & strErrDescription _
& vbNewLine & "Por favor contate o Administrador de Sistema."
130 MsgBox StrMsg, vbExclamation, strCallingProc
140 Call Logtxt
150 End If
160 Set rst = CurrentDb.OpenRecordset("tblLogErros", , dbAppendOnly)
170 rst.AddNew
180 rst![ErroNumero] = lngErrNumber
190 rst![ErroDescricao] = Left$(strErrDescription, 255)
200 rst![ErroData] = Now()
210 rst![NomeForm] = FormName
220 rst![NomeProcedimento] = strCallingProc
230 rst![NomeUsuario] = Usuario
240 rst![MostrarUsuario] = bShowUser
250 If Not IsMissing(vParameters) Then
260 rst![Parametros] = Left(vParameters, 255)
270 End If
280 rst.Update
290 rst.Close
300 LogError = True
310 End Select
Exit_LogError:
320 Set rst = Nothing
330 Exit Function
Err_LogError:
340 StrMsg = "Uma situação inesperada surgiu em seu programa." & vbCrLf & _
"Por Favor Anote os seguintes detalhes" & vbCrLf & vbCrLf & _
"Procedimento: FUNÇÃO logError " & strCallingProc & vbCrLf & _
"Numero do Erro: " & lngErrNumber & vbCrLf & strErrDescription & vbCrLf & vbCrLf & _
"Numero da linha: " & Erl & vbCrLf & vbCrLf & _
"Não foi possível gravar por causa do erro: " & err.Number & vbCrLf & err.Description
350 MsgBox StrMsg, vbCritical, "LogError()"
360 Resume Exit_LogError
End Function
Espero ter sido claro.
Cumprimentos.