** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Devolver nombre del procedimiento que da error
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoDevolver nombre del procedimiento que da error

 Responder Responder
Autor
Mensaje
teogf Ver desplegable
Asiduo
Asiduo


Unido: 09/Febrero/2007
Localización: España
Estado: Sin conexión
Puntos: 388
Enlace directo a este mensaje Tema: Devolver nombre del procedimiento que da error
    Enviado: 12/Octubre/2017 a las 00:23
Buenas noches,

Estoy intentando realizar en una variable pública con una cadena que me tiene que devolver el Tipo de error, formulario y procedimiento de evento.

Para ello he realizado la siguiente cadena:

MsgBox err.Description & " en el formulario: " & Me.name & " y en Módulo: " & "AQUI ES DONDE NO SE EXTRAER EL NOMBRE DEL PROCEDIMIENTO CON EL ERROR"

Tenéis alguna idea como recibir el nombre del procedimiento de evento donde se ha generado el error?

Saludos.
Arriba
lbauluz Ver desplegable
Administrador
Administrador
Avatar

Unido: 29/Marzo/2005
Localización: Alcalá Meco
Estado: Sin conexión
Puntos: 2888
Enlace directo a este mensaje Enviado: 12/Octubre/2017 a las 02:07
Se me ocurren dos opciones.

1 Define una variable global y cada vez que entres a una función, le asignas el nombre de la función.

2 Básate en esto.

Private Sub EstaEsMiFuncion()

    Dim strNomFuncion As String
    strNomFuncion = Application.VBE.ActiveCodePane.CodeModule.ProcOfLine(Application.VBE.ActiveCodePane.TopLine, 0)
    MsgBox strNomFuncion
End Sub


Para la segunda opción, recuerda que tienes que ir al centro de confianza y habilitar que se pueda acceder al código VBE.

Un saludo.

Luis
Quod natura non dat, Salmantica non præstat
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: Sin conexión
Puntos: 11354
Enlace directo a este mensaje Enviado: 12/Octubre/2017 a las 13:22
Hola,

Luis: esa función de muestra me devuelve el procedimiento de la linea superior EN PANTALLA, que no siempre coincide con la del procedimiento a no ser que tenga la ventana como Ver procedimiento. Yo siempre tengo vista Ver módulo completo por lo que no me ha servido... aunque es un punto de vista a estudiar.

Expongo como 
Para saber el MÓDULO dónde se ejecuta el código se puede utilizar 
Application.VBE.ActiveCodePane.CodeModule.Name

Para el procedimiento específico no he encontrado aun nada (a falta de estudiar la línea que apunta Luis).

Te contaré lo que yo utilizo para los controles de error:
MZ-TOOLS. Utilidad de Carlos Quintero imprescindible para programadores. La versión 8.0 es de pago pero merece la pena (https://www.mztools.com). Ahí puedes definir controles de error personalizados que, con un simple clic se agregan al código.

Ejemplo de manejador de error:


    On Error GoTo ErrorHandler
    
$P[METHOD_BODY]

ExitProcedure:
    On Error GoTo 0
    Exit $P[CODE_ELEMENT_KIND_KEYWORD]
ErrorHandler:
    Select Case Err.Number
        Case 0
        Case Else
            MsgBox "Error " & Err.Number & " - " & Err.Description & vbNewLine & _
                    "Procedimiento: $P[CODE_ELEMENT_NAME]" & vbNewLine & _
                    "Módulo: " & Application.VBE.ActiveCodePane.CodeModule.Name, vbCritical, "AVISO"
            Resume ExitProcedure
    End Select


Una vez creado un procedimiento como este "ejemplo" (chorras):

Function HolaMundo()
    MsgBox "Hola mundo"
End Function

Le aplicas el manejador de error definido y queda así

Function HolaMundo()
    On Error GoTo ErrorHandler
    
    MsgBox "Hola mundo"

ExitProcedure:
    On Error GoTo 0
    Exit Function
ErrorHandler:
    Select Case Err.Number
        Case 0
        Case Else
            MsgBox "Error " & Err.Number & " - " & Err.Description & vbNewLine & _
                    "Procedimiento: HolaMundo" & vbNewLine & _
                    "Módulo: " & Application.VBE.ActiveCodePane.CodeModule.Name, vbCritical, "AVISO"
            Resume ExitProcedure
    End Select
End Function

Espero te sirva

Xavi, un minyó de Terrassa

Mi web
Arriba
teogf Ver desplegable
Asiduo
Asiduo


Unido: 09/Febrero/2007
Localización: España
Estado: Sin conexión
Puntos: 388
Enlace directo a este mensaje Enviado: 13/Octubre/2017 a las 07:49

Hola Xavi,

Al final con tus indicaciones y las de Ibauluz he montado la siguiente línea que para mí ha sido perfectamente válida. Aunque no me devuelve el módulo concreto del error, por lo menos se acerca bastante para permitir su la localización:

MsgBox err.Number & " - " & err.Description & " - " & _

Application.VBE.ActiveCodePane.CodeModule.ProcOfLine(Application.VBE.ActiveCodePane.TopLine, 0) & _

" - " & Application.VBE.ActiveCodePane.CodeModule.name

 

Salvo que exista alguna forma más precisa, se puede cerrar el post. No obstante en caso de encontrar nueva información lo abriré para poner la solución.

Saludos.



Editado por teogf - 13/Octubre/2017 a las 07:49
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable