Error: se ha interrumpido la ejecucion del codigo

26/06/2007 - 03:43 por Ivan | Informe spam
hola a todos, (aviso: al final a vuelto a slirme otro de mis tomos/rollos)

a ver si podeis echarme un cable una vez mas.

tengo este codigo que me ha estado funcionando sin problemas hasta hoy: (y que ahora parece volver a funcionar)

Function AbrirLibro() As Boolean
On Error Resume Next
AbrirLibro = Application.Dialogs(xlDialogOpen).Show
If Not AbrirLibro Then MsgBox "No se ha abierto ningun archivo"
End Function

el motivo del uso de On Error Resume Next, es que una vez abierto el cuadro de dialogo, si, pej., se intentaba abrir un
archivo protegido y pedirte la contraseña, en caso de cancelar se producia un error (el 1004, si no me equivoco).

el caso es que tras llevar tiempo funcionando sin problemas, de repente me ha empezado a aparecer el mensaje 'se ha
interumpido la ejecucion del codigo', ademas en cualquiera de los casos excepto aceptando el cuadro de dialogo, y, a
pesar de haberle dado mil vueltas no he conseguido salir de ahi ni encontrar la causa hasta reiniciar el equipo

aunque este codigo es solo la parte donde el problema se ha hecho mas evidente, ya llevaba un rato con cosas raras
(algun cuelgue al que no he conseguido encontrar el motivo) y en concreto una cosa que quizas sea la causa misma del
problema:

estaba haciendo pruebas para obtener diferentes numeros y descripciones de error con algo parecido a esto. (no es el
mismo codigo pues el original directamente desaparecio /se borro al ejecutarlo sin que aparentemente pasara nada malo,
aparte de cerrar otro libro que estaba abierto en ese momento y que quizas fuera el activo en ese momento, pero no el
contenedor del codigo)

Sub escribir_Errores()
Dim msj As String
msj = ""
With ThisWorkbook
On Error Resume Next
Workbooks.Open "nombreFalsoDeLibro" & "\" & .Path
If Err.Number <> 0 Then _
msj = msj & "Error por libro inexistente" & vbCr & _
vbCr & "Nº Error = " & Err.Number & vbCr _
& vbCr & "desripcion = " & Err.Description & vbCr & vbCr
On Error GoTo 0
On Error Resume Next
Workbooks.Open .FullName
If Err.Number <> 0 Then _
msj = msj & "Error por libro ya abierto" & vbCr & _
vbCr & "Nº Error = " & Err.Number & vbCr & _
vbCr & "desripcion = " & Err.Description
On Error GoTo 0
End With
Debug.Print msj
End Sub

al cabo de un rato es cuando me ha empezado a dar los problemas. Es posible que el codigo fuera condicionando la
activacion/desactivacion del 'tratamiento' de errores (no estoy seguro pues, aunque mi intencion era hacer una prueba de
este tipo, al no conservarse el codigo, y con todo el trajin que he tenido despues, no estoy del todo seguro si era
esta). Algo asi :

On Error Resume next
codigo
If Err.Number <> 0 Then
on error goto 0
on error resume next
codigo
If Err.Number <> 0 Then
on error goto 0
on error resume next
..
me he tirado un buen rato volviendome loco intentando encontrar el motivo de que no me funcionara (o eso creo) la
instruccion 'On Error Resume Next'. Aunque la cosa parece haberse resuelto reiniciando el equipo, no he conseguido
encontrar la causa, salvo que es muy posible que el archivo en el que me ha empezado el problema este a punto de
corromperse. Pero lo curioso es que ni cerrando ese archivo, ni cerrando Excel y volviendolo abrir con un libro nuevo he
conseguido arreglar el tema. Solo parece (toco madera) haberse resuelto reiniciando el equipo.

bueno, aprte del rollo que me acabo de tirar, no se si mas o menos se ve lo que me ha ocurrido, pero si alguien ve por
donde puede ir el problema le agradecere su ayuda

un saludo y hasta pronto
Ivan
 

Leer las respuestas

#1 Héctor Miguel
26/06/2007 - 05:29 | Informe spam
hola, Ivan !

__ 1 __
tengo este codigo que me ha estado funcionando sin problemas hasta hoy: (y que ahora parece volver a funcionar)
Function AbrirLibro() As Boolean
On Error Resume Next
AbrirLibro = Application.Dialogs(xlDialogOpen).Show
If Not AbrirLibro Then MsgBox "No se ha abierto ningun archivo"
End Function
el motivo del uso de On Error Resume Next, es que una vez abierto el cuadro de dialogo, si, pej.
se intentaba abrir un archivo protegido y pedirte la contrase#a, en caso de cancelar se producia un error (el 1004, si no me equivoco).
el caso es que tras llevar tiempo funcionando sin problemas, de repente me ha empezado a aparecer el mensaje
'se ha interumpido la ejecucion del codigo', ademas en cualquiera de los casos excepto aceptando el cuadro de dialogo
y, a pesar de haberle dado mil vueltas no he conseguido salir de ahi ni encontrar la causa hasta reiniciar el equipo [...]



1) [aparentemente] no es en esta seccion de codigo donde se genera el error de interrupcion [sin embargo]...

__ 2 __
aunque este codigo es solo la parte donde el problema se ha hecho mas evidente, ya llevaba un rato con cosas raras
(algun cuelgue al que no he conseguido encontrar el motivo) y en concreto una cosa que quizas sea la causa misma del problema:
estaba haciendo pruebas para obtener diferentes numeros y descripciones de error con algo parecido a esto.
(no es el mismo codigo pues el original directamente desaparecio /se borro al ejecutarlo sin que aparentemente pasara nada malo,
aparte de cerrar otro libro que estaba abierto en ese momento y que quizas fuera el activo en ese momento, pero no el contenedor del codigo)
Sub escribir_Errores()
Dim msj As String
msj = ""
With ThisWorkbook
On Error Resume Next
Workbooks.Open "nombreFalsoDeLibro" & "\" & .Path
If Err.Number <> 0 Then _
msj = msj & "Error por libro inexistente" & vbCr & _
vbCr & "Nº Error = " & Err.Number & vbCr _
& vbCr & "desripcion = " & Err.Description & vbCr & vbCr
On Error GoTo 0
On Error Resume Next
Workbooks.Open .FullName
If Err.Number <> 0 Then _
msj = msj & "Error por libro ya abierto" & vbCr & _
vbCr & "Nº Error = " & Err.Number & vbCr & _
vbCr & "desripcion = " & Err.Description
On Error GoTo 0
End With
Debug.Print msj
End Sub
al cabo de un rato es cuando me ha empezado a dar los problemas.
Es posible que el codigo fuera condicionando la activacion/desactivacion del 'tratamiento' de errores
(no estoy seguro pues, aunque mi intencion era hacer una prueba de este tipo, al no conservarse el codigo [...]



2) parece que esta forma de des/re/habilitar los tratamientos de errores SI pudiera ser causa de algun error *de interrupcion*
tomado de la ayuda en linea de vba...

=> On Error Goto 0
"... desactiva el control de errores en el procedimiento actual."
"No especifica la linea 0 como el inicio del cidigo de control de errores"
"ni siquiera cuando el procedimiento contiene una linea con el numero 0."
"Sin una instruccion On Error GoTo 0, el control de errores se desactiva automaticamente al salir del procedimiento."

=> On Error Resume Next
"... puede ser preferible a On Error GoTo cuando se traten errores generados durante el acceso a otros objetos."
"Comprobar Err despues de cada interaccion con un objeto elimina la ambiguedad en cuanto a que objeto... produjo el error."
"De este modo puede saber que objeto ha colocado el codigo de error en Err.Number"
"asi como que objeto genero originalmente el error (el objeto especificado en Err.Source)."

__ 3 __
y con todo el trajin que he tenido despues, no estoy del todo seguro si era esta). Algo asi :
On Error Resume next
codigo
If Err.Number <> 0 Then
on error goto 0
on error resume next
codigo
If Err.Number <> 0 Then
on error goto 0
on error resume next
..
... buen rato volviendome loco intentando encontrar el motivo de que no me funcionara (o eso creo) la instruccion 'On Error Resume Next'.
Aunque la cosa parece haberse resuelto reiniciando el equipo, no he conseguido encontrar la causa
salvo que es muy posible que el archivo en el que me ha empezado el problema este a punto de corromperse.
Pero lo curioso es que ni cerrando ese archivo, ni cerrando Excel y volviendolo abrir con un libro nuevo he conseguido arreglar el tema.
Solo parece (toco madera) haberse resuelto reiniciando el equipo.
... no se si mas o menos se ve lo que me ha ocurrido, pero si alguien ve por donde puede ir el problema le agradecere su ayuda



3) [probablemente] en lugar de usar *en secuencia* algo como:
on error resume next
codigo
if err.number <> 0 then
on error goto 0
on error resume next

prueba mejor *limpiando* algun error causado con algo como:
on error resume next
codigo
if err.number <> 0 then
err.clear <= ESTE cambio pudiera hacer la idferencia -?-
on error resume next

saludos,
hector.

Preguntas similares