Macros "colandose" en libros ajenos

03/07/2006 - 00:28 por klomkbock | Informe spam
Hola de nuevo a todos

Hoy me ha surjido una duda, que no estoy muy seguro de saber explicar. Voy
a intentarlo a ver si me la podeis aclarar.

Mientras estaba trabajando/trasteando por el editor de vba con varios
libros abiertos, pero probando codigo en solo uno de ellos que uso para
las pruebas, al ejecutar un procedimiento con un argumento que hace
referencia al nombre de una hoja ( hj as String) le he pasado el nombre
"Hoja1". Con este nombre me ha funcionado bien muchas veces pero hoy me ha
dado 'indice fuera del intervalo'. He supuesto que era por tener otros
libros abiertos con "Hoja1" y he convertido el argumento al tipo
"Worksheet", para evitar el riesgo de que le pueda ocurrir a terceros.

La duda esta en que creia que el alcance de la variable se limitaba al
libro contenedor, aun estando declarado como public. ¿o a lo mejor es asi
y el error se ha debido a otra causa?. Preferia usar una variable string
pensando en la memoria ocupada ¿o quizas no sea demasiado gravoso el uso
de una variable objeto?

Bueno como veis ya son dos dudas (mas ...), si me las podeis aclarar os lo
agradezco.

Un saludo y hasta pronto.
Ivan
 

Leer las respuestas

#1 Héctor Miguel
03/07/2006 - 03:01 | Informe spam
hola, Ivan !

... trabajando/trasteando... con varios libros abiertos, pero... codigo en solo uno de ellos... para las pruebas
... un procedimiento... que hace referencia al nombre de una hoja (hj as String) le he pasado el nombre "Hoja1"
... me ha funcionado bien muchas veces pero hoy me ha dado 'indice fuera del intervalo'.
He supuesto que era por tener otros libros abiertos con "Hoja1" y he convertido el argumento al tipo "Worksheet"
para evitar... que le pueda ocurrir a terceros.
... creia que el alcance de la variable se limitaba al libro contenedor, aun estando declarado como public.
... o a lo mejor es asi y el error se ha debido a otra causa?
... usar una variable string pensando en la memoria ocupada o quizas no sea demasiado gravoso el uso de una variable objeto?



1) estoy suponiendo que el codigo hace una referencia del tipo Worksheets("hoja1") -etc. etc.etc.- [asi que creo que]
el error es -precisamente- por que el 'otro' libro [estando activo]... NO tiene una hoja que se llame "Hoja1"

2) 'piensa' en los 'objetos-child' de acuerdo a sus 'objetos-parent' [me explico]...

a) si quieres 'afectar' la celda 'A1'... usando la 'simple' expresion -> Range("a1")...
1) ASUME... la celda 'A1' de la hoja 'activa' [cualquiera que sea el libro 'activo']
2) REQUIERE... que la hoja 'activa' del libro 'activo' SEA una hoja de calculo [no de graficos]

b) si requieres 'afectar' la celda 'A1' de una hoja en especifico... puedes 'calificar' su 'objeto-parent' +/- como sigue:
-> Worksheets("Hoja25").Range("a1") solo 'observa' que la expresion anterior...
1) ASUME... que el libro 'activo' SI TIENE una hoja que se llame "hoja25"

c) si quieres 'afectar' la celda 'A1' de una hoja especifica Y de un libro en particular [checa los objetos-parent]...
1) haciendo referencia al nombre de cualquier libro abierto en la sesion...
-> Workbooks("Un libro abierto.xls").Worksheets("Una hoja de calculo existente").Range("a1")
2) haciendo referencia a las hojas del libro que contiene la macro en ejecucion...
-> ThisWorkbook.Worksheets("Una hoja de calculo existente").Range("a1")
3) usando los 'codename' de los objetos hoja del libro que contiene la macro en ejecucion...
-> Hoja25.Range("a1")

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

Preguntas similares