Diferencias de error entre versiones (error 1004)

24/05/2006 - 18:40 por ppozap | Informe spam
Hola a tod@s.

Tengo una aplicación bastante compleja que antes la utilizaba una
persona que trabajaba con Excel 5 (si, si, como lo leeis, Excel 5)
porque no sabia arreglar los errores de conversion que le daban las
macros al actualizarlo a una version mas reciente de Excel.

Bien, pues ahora la utilizo yo y me ha tocado convertirlo. El problema
me viene porque hay unos controles de error que no funcionan o para ser
mas exactos no funcionan bien en todas las macros.

Se manejan datos de 3 o 4 archivos pero estos son como "gestores" es
decir hacen una serie de calculos dependiendo de los datos que
traspases de otros archivos, de manera que se abre un gestor, se
traspasan datos (no vinculandolos) y cuando se terminan y se cierra el
gestor, sigue vacio.

Hay unas macros que llaman a los archivos de datos para copiar estos y
si no estan abiertos los abren. Aqui esta el problema porque eso se
hace con un control de error. El error que en la anterior version
detectaba este problema era el 1004, pero ahora no lo reconoce, se
queda parado en esa parte del procedimiento. Me he mirado los errores
detectables y el error 1004 no aparece.
Os copio el codigo tal y como esta "traducido" a la nueva version:

Sub AbrirCombina()
On Error GoTo ControlErr
Workbooks("COMBINA.XLS").Activate
Exit Sub

ControlErr:
Select Case Err
Case 1004 ' Error "No esta abierta la hoja COMBINA".
ChDir "c:\Proyectos"
Workbooks.Open Filename:="COMBINA.XLS"
Case Else
End Select
Resume
End Sub

En la ventana de depuracion se queda parado en la linea "Select Case
Err" y con una inspeccion de variable no me manda ningun numero de
error.

¿El control equivalente tendría que hacerse con el error 9 o hay
otro? ¿Conoceis otra forma de hacerlo?

Gracias por anticipado,

Pedro

Preguntas similare

Leer las respuestas

#1 Miguel Zapico
24/05/2006 - 20:34 | Informe spam
Puedes probar a usar Err.Number en lugar de Err:
Select Case Err.Number
Con esto al menos la macro deberia pasar de ese punto.

Miguel.

"" wrote:

Hola a

Tengo una aplicación bastante compleja que antes la utilizaba una
persona que trabajaba con Excel 5 (si, si, como lo leeis, Excel 5)
porque no sabia arreglar los errores de conversion que le daban las
macros al actualizarlo a una version mas reciente de Excel.

Bien, pues ahora la utilizo yo y me ha tocado convertirlo. El problema
me viene porque hay unos controles de error que no funcionan o para ser
mas exactos no funcionan bien en todas las macros.

Se manejan datos de 3 o 4 archivos pero estos son como "gestores" es
decir hacen una serie de calculos dependiendo de los datos que
traspases de otros archivos, de manera que se abre un gestor, se
traspasan datos (no vinculandolos) y cuando se terminan y se cierra el
gestor, sigue vacio.

Hay unas macros que llaman a los archivos de datos para copiar estos y
si no estan abiertos los abren. Aqui esta el problema porque eso se
hace con un control de error. El error que en la anterior version
detectaba este problema era el 1004, pero ahora no lo reconoce, se
queda parado en esa parte del procedimiento. Me he mirado los errores
detectables y el error 1004 no aparece.
Os copio el codigo tal y como esta "traducido" a la nueva version:

Sub AbrirCombina()
On Error GoTo ControlErr
Workbooks("COMBINA.XLS").Activate
Exit Sub

ControlErr:
Select Case Err
Case 1004 ' Error "No esta abierta la hoja COMBINA".
ChDir "c:\Proyectos"
Workbooks.Open Filename:="COMBINA.XLS"
Case Else
End Select
Resume
End Sub

En la ventana de depuracion se queda parado en la linea "Select Case
Err" y con una inspeccion de variable no me manda ningun numero de
error.

¿El control equivalente tendría que hacerse con el error 9 o hay
otro? ¿Conoceis otra forma de hacerlo?

Gracias por anticipado,

Pedro


Respuesta Responder a este mensaje
#2 Héctor Miguel
24/05/2006 - 23:11 | Informe spam
hola, Pdero !

1) en la version 5 -apenas- se introduce vba para las macros en excel [en hojas de codigo modulo1, modulo2, etc.]
[comprenderas que] la 'gama' de errores 'detectables' era mas 'reducida' que ahora :))
una gran parte de los errores 'pasaban' por el error 1004 [y no existia el error 9 como 'subindice fuera del intervalo'] :\

2) si [a final de cuentas] estas ya convirtiendo a versiones 'recientes' [incluso si necesitas que sigan 'operables' en anteriores]...
prueba con una 'estructura' mas delgada [pero igualmente 'funcional'] +/- como la siguiente:
misma macro que expones ==Sub AbrirCombina()
On Error Resume Next
Workbooks("combina.xls").Activate
If Err <> 0 Then Workbooks.Open "c:\proyectos\combina.xls"
End Sub

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

__ la consulta original __
... una aplicacion... que trabajaba con Excel 5... arreglar los errores de conversion... al actualizarlo a una version mas reciente
... ahora la utilizo yo y me ha tocado convertirlo... hay unos controles de error que... no funcionan bien en todas las macros...
... El error que en la anterior version detectaba [este problema] era el 1004, pero ahora no lo reconoce...
... he mirado los errores detectables y el error 1004 no aparece. Os copio el codigo tal y como esta "traducido" a la nueva version:
Sub AbrirCombina()
On Error GoTo ControlErr
Workbooks("COMBINA.XLS").Activate
Exit Sub
ControlErr:
Select Case Err
Case 1004 ' Error "No esta abierta la hoja COMBINA".
ChDir "c:\Proyectos"
Workbooks.Open Filename:="COMBINA.XLS"
Case Else
End Select
Resume
End Sub
... se queda parado en la linea "Select Case Err" y con una inspeccion de variable no me manda ningun numero de error.
El control equivalente tendría que hacerse con el error 9 o hay otro? Conoceis otra forma de hacerlo?
Respuesta Responder a este mensaje
#3 P3dro
26/05/2006 - 13:04 | Informe spam
Bueno, pues al final lo he resuelto poniendo en el control de error el
9 y así me ha funcionado bien en Officce 2000. pero.
Oh, maravilla, resulta que cuando lo he instalado en un equipo que
tenía Officce 2003 SP2, resulta que el error 1004 sí me lo reconocía
en el sentido que yo quería pero otras cosas que había cambiado en la
versión 2000 ahora con la 2003 no me funcionan.
¿Pero es que estamos locos o que? ¿Es que Microsoft no se va a poner
de acuerdo entre las versiones que sacan o es que van probando y
volviendo a probar en cada una de las que sacan?
A mí, aparte de volverme loco, me desquician.

Un saludo.

Pedro
Respuesta Responder a este mensaje
#4 Héctor Miguel
26/05/2006 - 18:05 | Informe spam
hola. P3dro !

... al final lo he resuelto poniendo en el control de error el 9 y asi me ha funcionado bien en Officce 2000
... pero Oh, maravilla... en un equipo que tenia Officce 2003 SP2... el error 1004 si me lo reconocia en el sentido que yo queria
pero otras cosas que habia cambiado en la version 2000 ahora con la 2003 no me funcionan.
Pero es que estamos locos o que? Es que Microsoft no se va a poner de acuerdo entre las versiones que sacan
o es que van probando y volviendo a probar en cada una de las que sacan? A mi, aparte de volverme loco, me desquician.



1) [creo que] en tanto no expongas cuales son los 'otros casos de error' que controlas y que si/no funcionan 'entre versiones'... -?-

2) para el caso concreto de tu consulta original [activar un libro que no esta presente o abierto en la sesion]...
[me parece que] 'sigo estando en lo correcto' con los puntos 1 y 2 de mi mensaje anterior ;)
-> has echo alguna prueba con el codigo del ejemplo ?

3) sobre el mismo caso [activar libros no abiertos]... el siguiente codigo, probado en las versiones 97 a 2003...
NO 'detectan' como error 1004 un intento de activar un libro no presente en la sesion :(
Sub Probando_errores()
On Error GoTo Control_errores
Workbooks("Libro que no existe").Activate
Exit Sub
Control_errores:
Select Case Err
' Case 9: MsgBox "El libro no esta en el indice."
Case 1004: MsgBox "El error es 1004"
Case Else: MsgBox "Error desconocido"
End Select
End Sub

-> si dejas 'activa' la linea con el error 9... [obviamente] este es el mensaje que 'salta'
si dejas 'comentada' la linea con el error 9... la linea con el error 1004 es 'omitida' y salta el 'Case Else' ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
#5 P3dro
31/05/2006 - 11:31 | Informe spam
Hola Héctor Miguel.
Ante todo gracias por haberte tomado tantas molestias y disculpa por no
haberte repondido (al menos de forma completa) a tu primer mensaje.
Probé efectivamente ese primer código que me mandabas y funciona
correctamente, por otra parte lógico porque al detectar cualquier
error abría el archivo. Decidí al final no utilizar ese método y sí
el control de error 9 porque, de verdad, tengo unos usuarios que son
seguidores fieles al Sr. Murphy (el de la ley) y me hacen cosas muy
brutas con los archivos por lo que decidí controlar uno a uno los
posibles errores que se les pudieran dar, no un error en general. No
sé si me explico.
Aprovechando parte del tema (diferencias de código entre versiones) os
quiero plantear otro problema que me ha surgido:

La conversión de la refencia relativa a celdas por ejemplo en la
función "ActiveCell.FormulaR1C1" la hace bien de la V.5 a la V.2000
pero no funciona con la V.2003.
Un ejemplo:
ActiveCell.FormulaR1C1 "=SI(LC(-3)=L(-1)C(-3);0;SUMAR.SI(L7C(-3):L256C(-3);LC(-3);L7C(-5):L256C(-5)))"

Esto genera error porque no ha hecho la conversión de "L" por "R"
(para las filas). Lo he modificado manualmente y me sigue dando error y
no os podeis imaginar la cantidad de fórmulas relativas parecidas a
esas que tengo escritas.

¿Qué sabeis de esto?


Héctor Miguel ha escrito:

hola. P3dro !

> ... al final lo he resuelto poniendo en el control de error el 9 y asi me ha funcionado bien en Officce 2000
> ... pero Oh, maravilla... en un equipo que tenia Officce 2003 SP2... el error 1004 si me lo reconocia en el sentido que yo queria
> pero otras cosas que habia cambiado en la version 2000 ahora con la 2003 no me funcionan.
> Pero es que estamos locos o que? Es que Microsoft no se va a poner de acuerdo entre las versiones que sacan
> o es que van probando y volviendo a probar en cada una de las que sacan? A mi, aparte de volverme loco, me desquician.

1) [creo que] en tanto no expongas cuales son los 'otros casos de error' que controlas y que si/no funcionan 'entre versiones'... -?-

2) para el caso concreto de tu consulta original [activar un libro que no esta presente o abierto en la sesion]...
[me parece que] 'sigo estando en lo correcto' con los puntos 1 y 2 de mi mensaje anterior ;)
-> has echo alguna prueba con el codigo del ejemplo ?

3) sobre el mismo caso [activar libros no abiertos]... el siguiente codigo, probado en las versiones 97 a 2003...
NO 'detectan' como error 1004 un intento de activar un libro no presente en la sesion :(
Sub Probando_errores()
On Error GoTo Control_errores
Workbooks("Libro que no existe").Activate
Exit Sub
Control_errores:
Select Case Err
' Case 9: MsgBox "El libro no esta en el indice."
Case 1004: MsgBox "El error es 1004"
Case Else: MsgBox "Error desconocido"
End Select
End Sub

-> si dejas 'activa' la linea con el error 9... [obviamente] este es el mensaje que 'salta'
si dejas 'comentada' la linea con el error 9... la linea con el error 1004 es 'omitida' y salta el 'Case Else' ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida