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

#6 Héctor Miguel
31/05/2006 - 23:08 | Informe spam
hola, P3dro !

Aprovechando parte del tema (diferencias de codigo entre versiones) os quiero plantear otro problema que me ha surgido:
La conversion 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 conversion de "L" por "R" (para las filas).
Lo he modificado manualmente y me sigue dando error y no os podeis imaginar la cantidad de formulas... parecidas... que tengo escritas.
Que sabeis de esto?



creo que el tema es mas amplio de lo que se alcanza a apreciar... 'a simple vista' :))
te paso algo de informacion [+/- hasta donde se]... al respecto ;)

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

1) asumo que el ejemplo que planteas 'viene generado' desde la version 5 y [casi seguramente] en castellano -?-
[probablemente] en la version 'original' se leia algo +/- como lo siguiente:
CeldaActiva.FórmulaL1C1 = "=SI(LC(-3)=L(-1)C(-3);0;SUMAR.SI(L7C(-3):L256C(-3);LC(-3);L7C(-5):L256C(-5)))"
-> las versiones 5 [1993] y 7 [1995] son las unicas que 'aceptaban/usaban' [modulos vba de] codigo en español
a partir de la version 8 [1997] vba fue 'estandarizado' a... ->ingles<- por [severos] 'problemas de re/conversiones'

2) supongo que al abrirlo en versiones posteriores el codigo se ha [semi]'traducido' -> exceptuando la seccion entre comillas dobles -?-
ya que tienes una 'mezcla' entre ingles y castellano :)) [p.e.]
a) la parte del objeto y su propiedad... esta en ingles: -> ActiveCell.FormulaR1C1 b) la parte de la asigacion esta en castellano: -> "=SI(LC(-3)=L(-1)C(-3);0;SUMAR.SI(L7C(-3):L256C(-3);LC(-3);L7C(-5):L256C(-5)))"

3) para que puedas usar formulas en castellano [o en el idioma 'local'] con el estilo de notacion NO 'A1' por codigo vba...
es necesario cambiar la propiedad de -> FormulaR1C1 a -> FormulaLocalR1C1

4) el estilo de referencia ->en la interfase con el usuario<- si 'A1' o FC/LC/RC/... etc.
-> lo controla la aplicacion [excel] desde:
-> [menu] herramientas / opciones / [ficha] general / [seccion] configuracion -> estilo de referencia

5) no 'depende' -solo- de la version de excel... sino -tambien- del idioma en el que esta instalado [p.e.]
-> ingles = RC [Row/Column] <= SIEMPRE :D [lo que puede ser una 'ventaja'] ;)
-> aleman = RS [Reihe/Spalte] o incluso = SZ [Zeile/Spalte]
-> castellano = FC [Fila/Columna] o incluso = LC [Linea/Columna]
-> neederlands = RK [Rij/Kolom] etc. etc. etc.
-> ADEMAS... si cambias de 'LC' <-> 'FC' <-> 'RC' fallaran cuando se usen en otras pc's [con 'el otro' estilo de notacion]
-> ADEMAS de -posibles- diferencias entre el separador de argumentos que 'supongas' usa la interfase del usuario [, ; etc.]
-> ADEMAS, es probable que la 'relatividad' requiera de parentesis [en algunos casos] o de corchetes [en otros mas]
es decir, segun configuracion regional e idioma una notacion tipo: LC(-3) pudiera requerir cambios a: LC[-3]
[recuerda que todo lo que esta entre comillas dobles -en vba- equivale a constantes 'inamovibles'] :-((

6) como podras observar... si LC o FC... no es 'el unico' detalle con el que podrias enfrentarte 'en cualquier version' :-(
si vas a continuar con el estilo de referencia NO 'A1' para depositar formulas por codigo [FormulaR1C1 o FormulaLocalR1C1]...
-> [que es la unica 'forma' donde podrias encontrar 'problemas'] lo 'recomendable' es:
o... usar el estilo de referencia 'A1' [para la 'formulacion' de tus vinculos, etc.]
o... 'programar' ->en ingles<-... ya que siempre sera un 'estilo' RC [RowColumn]

7) si requieres conocer [con anticipacion] si vas a necesitar R/L/F para referencias a la fila [Row / Linea / Fila]...
por codigo: -> application.international(xluppercaserowletter) [o xluppercasecolumnletter] ;)
por formulas: -> letra para la fila =izquierda(direccion(1,1,,0)) letra para columna =extrae(direccion(1,1,,0),3,1)
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida