Public Function TieneControlErrores(vbc As VBIDE.VBComponent, lngInicioProc As Long) As Integer
'--------------------------------------------------------------------------------------------------------
' Fuente : https://access-global.net/mis-procedimientos-tienen-tratamiento-de-errores
'--------------------------------------------------------------------------------------------------------
' Título : TieneControlErrores
' Autor original : Alba Salvá
' Creado : 2023
' Propósito : detectar los procedimientos que no contienen tratamiento de errores
' Argumentos : La sintaxis de la función consta de los siguientes argumentos
' Variable Modo Descripción
'-------------------------------------------------------------------------------------------------------
' vbc Obligatorio VBIDE
' lngInicioProc Obligatorio Nombre de la tabla
'--------------------------------------------------------------------------------------------------------
' Retorno : Long
' 0 = No tiene tratamiento de errores
' 1 = tratamiento comentado
' 2 = tratamiento disponible
'--------------------------------------------------------------------------------------------------------
Dim lngFinLineaProc As Long
Dim lngInicioLineaTr As Long
Dim lngFinLineaTr As Long
Dim lngFinColTr As Long
Dim lngProcTyp As Long
Dim PosManejaError As Boolean
On Error GoTo lbError
With vbc.CodeModule
lngFinLineaProc = lngInicioProc + .ProcCountLines(.ProcOfLine(lngInicioProc, _
lngProcTyp), lngProcTyp) - 1 ' Calculo la última línea del procedimiento.
lngInicioLineaTr = lngInicioProc
PosManejaError = .Find("On Error", lngInicioLineaTr, 0, lngFinLineaTr, lngFinColTr, True) ' Busco la aparición de "On Error"
Do While PosManejaError = True And (lngFinLineaTr < lngFinLineaProc)
If Not EsComentario(.Lines(lngFinLineaTr, 1)) Then
TieneControlErrores = 2
Exit Function
Else
TieneControlErrores = 1
Exit Function
End If
lngInicioLineaTr = lngInicioLineaTr + 1 ' Si no se ha encontrado, incremento el número de línea y sigo buscando
PosManejaError = .Find("On Error", lngInicioLineaTr, 0, lngFinLineaTr, lngFinColTr, True)
Loop
End With
GoTo lbFinally
lbError:
MsgBox "Ha ocurrido un error" & vbCrLf & vbCrLf & _
"Código de Error : " & Err.Number & vbCrLf & _
"Origen del Error : ObtenerCode" & vbCrLf & _
"Descripción Error : " & Err.Description & _
Switch(Erl = 0, "", Erl <> 0, vbCrLf & "Línea No: " & Erl) _
, vbOKOnly + vbCritical, "¡Ha ocurrido un error"
lbFinally:
End Function
Public Function EsComentario(strLinea As String) As Boolean
'--------------------------------------------------------------------------------------------------------
' Fuente : https://access-global.net/mis-procedimientos-tienen-tratamiento-de-errores
'--------------------------------------------------------------------------------------------------------
' Título : EsComentario
' Autor original : Alba Salvá
' Creado : 2023
' Propósito : comprobar si una línea de un procedimiento es un comentario
' Argumentos : La sintaxis de la función consta de los siguientes argumentos
' Variable Modo Descripción
'-------------------------------------------------------------------------------------------------------
' strLinea Obligatorio Línea que se va a analizar
'--------------------------------------------------------------------------------------------------------
' Retorno : booleano
' sí = es un comentario
' no = no es un comentario
'--------------------------------------------------------------------------------------------------------
strLinea = Trim$(strLinea)
If Left$(strLinea, 1) = "'" Or Left$(strLinea, 3) = "Rem" Then
EsComentario = True
End If
End Function