# Windows(...).Activate



## gustavomeeuwes (Aug 23, 2010)

Hola:
Una consulta.
Tengo 2 planillas abiertas. Una de nombre fijo, por ejemplo Planilla.xls que es la planilla que se muestra y la otra que ya guardé con el nombre del valor de una celda, por ejemplo 123.xls. Como hago para mostrar esta última o como hacer para cerrarla y mantener activa la primera.
Probé de forma igual a cuando creé la planilla, pero no funciona.

' Estoy trabajando en la planilla 123.xls, donde 123 es el valor de la celda "C14". "C14" es un valor variable. 
    ...................
    ActiveWorkbook.Save
    Workbooks.Open Filename:="C:\C.I.S\Planilla.xls"
    Windows("Range("C14").Value").Activate
    ActiveWorkbook.Close
    ....................

' Cierro la planilla 123.xls ó mejor dicho Range("C14").Value y debe quedar abierta Planilla.xls

Espero una vez más vuestra ayuda.
Cordiales saludos
Gustavo


----------



## gustavomeeuwes (Aug 23, 2010)

Aclaración:
Al ejecutar la macro paso a paso, ni bien empieza me da error de compilación: Error de sintaxis

ActiveWorkbook.Save
Workbooks.Open Filename:="C:\C.I.S\Planilla.xls"
Windows("Range("C14").Value").Activate
ActiveWorkbook.Close


----------



## Jaafar Tribak (Aug 24, 2010)

gustavomeeuwes said:


> Aclaración:
> Al ejecutar la macro paso a paso, ni bien empieza me da error de compilación: Error de sintaxis
> 
> ActiveWorkbook.Save
> ...


 
Hola Gustavo .

Prueba la sintaxis siguiente :


```
Windows(CStr(Range("C14").Value)).Activate
```
 
De hecho, no es necesario activar la ventana del fichero para cerralo. Se puede conseguir cerrar la planilla 123 de la manera siguiente :


```
Workbooks(CStr(Range("C14").Value)).Close
```


----------



## gustavomeeuwes (Aug 24, 2010)

Hola Jaafar:
Muchas gracias por la respuesta.
Utilicé el 
Code:

Workbooks(CStr(Range("C14").Value)).Close</PRE>y funciona bien, cierra a la planilla.
El tema es que al cerrarla, me deja de ejecutar la  macro, y queda pendiente 1 paso por realizar, que es llamar a otra macro.
Al hacerlo paso a paso, y visualizando el Editor de Visual Basic, al llegar al code de arriba, la planilla se cierra pero también se cierra el mósulo de esa macro y abre el último modulo usado de Planilla General.xls.
Espero haber sido claro.
Como puedo evitarlo?
Una opción se me ocurre que podría ser que al abrirse Planilla General.xls se autoejecute la macro que quedó pendiente.
Cual sería el code en este caso?

Desde ya muchas gracias
Cordiales Saludos
Gustavo


----------



## gustavomeeuwes (Aug 24, 2010)

Hola de nuevo Jaafar:
Agregué en ThisWorkbook de Planilla General.xls

Private Sub Workbook_Open()
    Application.Run "'Planilla General.xls'!Nueva_Ficha"
End Sub

Donde Nueva_Ficha es la macro a autoejecutarse al abrir Planilla General.xls

Como verá mis conocimientos son nulos.
Gracias. Saludos
Gustavo


----------



## gustavomeeuwes (Aug 24, 2010)

Probé con el Run sólo y tampoco:

Private Sub Workbook_Open()
Run "'Planilla General.xls'!Nueva_Ficha"
End Sub

Le hago otra pregunta: porque en el editor de VB algunas macros aparecen sólo con el nombre y otras hacen referencia específica al libro?
En una de esas macros llama a otro libro por lo que que haga referencia estaría bien, pero en otras es una macro interna.
El editor de VB muestra por ejemplo:

Macro1
Macro2
Macro3
Planilla General.xls!Macro4
Macro5
Macro6
Planilla General.xls!Macro7
etc etc


----------



## Greg Truby (Aug 24, 2010)

Hola Gustavo,

Me parece que usted está haciendo la vida un poco más complicado que lo necesario.  ¿Puede usted explicar en términos generales qué es lo que usted desea hacer?  Y no hablo de cosillas muy específicas, sino en general.  Puede ser que hay otra solución donde no habrá tantos enredos.

Atte,


----------



## gustavomeeuwes (Aug 24, 2010)

Hola Jaafar:
He seguido haciendo pruebas pero todas sin resultado.
Abro Planillla General.xls y con cualquiera de los 2 codes que me envió, activo y despues cierro o cierro directamente el libro 123.xls .
El tema sigue siendo que al guardar y cerrar la planilla 123.xls se corta la macro y me quedan instrucciones por cumplir.
Saludos
Gustavo


----------



## gustavomeeuwes (Aug 25, 2010)

Hola de nuevo Jaafar:
Al final pude hacerlo andar.
Puse la macro faltante en ThisWorkbook como autoejecutable al abrir el libro y listo.
Pero quería saber si puedes ayudarme con mi pregunta que incluí:

Le hago otra pregunta: porque en el editor de VB algunas macros aparecen sólo con el nombre y otras hacen referencia específica al libro?
En una de esas macros llama a otro libro por lo que que haga referencia estaría bien, pero en otras es una macro interna.
El editor de VB muestra por ejemplo:

Macro1
Macro2
Macro3
Planilla General.xls!Macro4
Macro5
Macro6
Planilla General.xls!Macro7
etc etc 

Además se me arma lío porque cuando guardo un libro con otro nombre, proceso en el que se copian todas las macros, y al querer ejecutar estas macros desde este nuevo libro me dice que no las encuentra.
Ej:
Libro original: Planilla General.xls, lo guardo como Planilla1.xls.
Quiero ejecutar una macro en este último libro y me aparece el error de que no encuentra la macro "Plantilla1.xls'!Macro<!-- google_ad_section_end --> 

No se puede evitar la referencia al libro?

Nuevamente gracias y saludos
Gustavo


----------



## gustavomeeuwes (Aug 25, 2010)

Cada vez me complico más. Estoy a punto de rendirme.
Cuando hice la macro autoejecutable en Planilla General.xls, y al guardar este libro como 123.xls, se copia esta macro.
Esta macro es para limpiar los datos de la planilla, que guardé en 123.xls, y cargar nuevos datos, guardar con otro nombre, y seguir este "Círculo".
El tema es que como dije antes la macro se guarda en 123.xls, y al abrir esta planilla se autoejecuta la macro y me limpia todos los datos, lo que no debe pasar. La planilla tengo que abrirla para actualizar datos o agregarle notas.
Podría dejar la planilla Planilla General.xls como está, con los datos anteriores, y sobreescribir los datos nuevos, pero no queda "visualmente" bien.
Cada vez lo complico más.

Perdón por esta avalancha de preguntas.

Cordiales saludos
Gustavo


----------



## gustavomeeuwes (Aug 23, 2010)

Hola:
Una consulta.
Tengo 2 planillas abiertas. Una de nombre fijo, por ejemplo Planilla.xls que es la planilla que se muestra y la otra que ya guardé con el nombre del valor de una celda, por ejemplo 123.xls. Como hago para mostrar esta última o como hacer para cerrarla y mantener activa la primera.
Probé de forma igual a cuando creé la planilla, pero no funciona.

' Estoy trabajando en la planilla 123.xls, donde 123 es el valor de la celda "C14". "C14" es un valor variable. 
    ...................
    ActiveWorkbook.Save
    Workbooks.Open Filename:="C:\C.I.S\Planilla.xls"
    Windows("Range("C14").Value").Activate
    ActiveWorkbook.Close
    ....................

' Cierro la planilla 123.xls ó mejor dicho Range("C14").Value y debe quedar abierta Planilla.xls

Espero una vez más vuestra ayuda.
Cordiales saludos
Gustavo


----------



## Jaafar Tribak (Aug 25, 2010)

> Le hago otra pregunta: porque en el editor de VB algunas macros aparecen sólo con el nombre y otras hacen referencia específica al libro?


 
Las Macros que residen en otros libros aparecen con la referencia al libro donde se ubican. Las Macros que se ubican dentro del presente libro aparecen solo con el nombre.



> Libro original: Planilla General.xls, lo guardo como Planilla1.xls.
> Quiero ejecutar una macro en este último libro y me aparece el error de que no encuentra la macro "Plantilla1.xls'!Macro<!-- google_ad_section_end -->
> 
> No se puede evitar la referencia al libro?


 
No utilises la Method _*Application.Run*_ para ejecutar la Macro.
Intenta ejecutar la Macro de la forma siguiente :

*Call Macro*

Como dijo nuestro colega _Greg_ , no esta muy claro lo que usted desea hacer.


----------



## gustavomeeuwes (Aug 25, 2010)

Hola Greg y Jaafar:

El problema de guardar la macro pude solucionarlo. Un tema menos.

Me queda lo siguiente:
Tengo mi planilla original "Planilla General.xls". En esta planilla cuando veo las macros guardadas aparece entre otras:

'Planilla General.xls'!Cerrar_Ficha.Cerrar_Ficha

Lleno los datos, ejecuto la macro para guardar, y la guarda como "123.xls" , donde 123 es el valor de la famosa celda "C14".
Hasta acá todo bien, pero....
Como parte de esta macro de guardar, le cambio la asignación de macros a unos botones, por ejemplo:

    ActiveSheet.Shapes("Botón1").Select
    Selection.OnAction = "Nombre_Macro"

En el "Nombre_Macro" debería poner
"'Planilla General.xls'!Cerrar_Ficha.Cerrar_Ficha", ya que Cerrar_Ficha es la macro que quiero ejecutar.
Al abrir después el libro 123.xls y hacer click en ese botón, lógicamente me dice que no encuentra la macro.
En este libro, la macro pasó a llamarse:
"'123.xls'!Cerrar_Ficha.Cerrar_Ficha"

La pregunta es si se puede sacar la referencia al libro de la macro y dejemos una macro "genérica" que se ejecute en cualquier otro libro, o en su defecto si al asignarle la nueva macro al botón pueda hacerlo con referencia a la famosa celda "C14" con lo que solucionaría el problema.
En "123.xls" ésta y otras macros más debo poder ejecutarlas, por lo que mi pregunta es extensiva a otras macros que se guardam con referencia al libro.
Espero haber sido claro.
Espero sus comentarios y ayuda.
Desde ya muchas gracias.
Saludos.
Gustavo


----------



## Jaafar Tribak (Aug 25, 2010)

Gustavo.

El diseno de su trabajo me parece mas complicado de lo necesario y estoy seguro que se podria lograr lo que deseas con mas facilida si revisaras la logica de su projecto.

Prueba esto :

Que ocurre si usted anade la linea siguiente al evento _Workbook_Open_ del libro 123.xls :


```
Private Sub Workbook_Open()
 
    ActiveSheet.Shapes("Botón1").OnAction = "Cerrar_Ficha.Cerrar_Ficha"

End Sub
```


----------



## Greg Truby (Aug 26, 2010)

Mire, Gustavo, tenemos un dicho en inglés: “you can put all the lipstick you want on a sow, but a pig´s a pig.” Más o menos: “no importa la cantidad de lápiz labial que pones en ella, una cerda sigue siendo una cerda.” Mientras vamos creciendo nuestras habilidades en VBA, casi todos llegamos a tener un proyecto donde tenemos macros regados por todo lado como migas de galletas en un jardín de niños y enlaces entre varios cuadernos que son más enredados que un plato de espagueti. Cuando uno se encuentra en circunstancias así, casi siempre existe una estructura muy diferente que sería mejor. Como hemos dicho don Jafaar y yo, si usted nos explica un poco sobre la estructura y metas generales del proyecto puede ser que servimos como faros en la neblina espesa donde usted está en este momento.
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-comfficeffice" /><o></o> 
Saludos,<o></o>


----------



## gustavomeeuwes (Aug 26, 2010)

Hola Greg y Jaafar:
Nuevamente gracias por vuestra dedicación y preocupación.
Después de seguir buscando los errores y tratando a su vez de aprender y no molestarlos a cada rato, pude solucionar el problema.
Hice una copia totalmente limpia de mi planilla original, y me desaparecieron las referencias al libro en las macros, cuando tengo este libro sólo abierto. Quedan solamente con el nombre de la macro y cuando guardo este libro con el otro nombre, puedo ejecutar esas macros sin problemas. No tengo que modificar nada. No sé si puede ser que estuviese arrastrando "basura" y eso me complicaba. Además mi planilla pasó de pesar 2.5 Mb a 200 Kb, a pesar de mantener todos los formatos, colores, etc. El contenido es el mismo pero se redujo el tamaño. En esta planilla limpia hago pruebas, corro las macros y el tamaño se mantiene, como debería ser.

Me queda una última pregunta (ahora sí prometo que es la última), y que no tiene nada que ver con esto.
Puse una función Contar.Si en mi planilla, no dentro de una macro.
Le pongo el rango a buscar, por ejemplo A1:A10000
Después en mi proceso para copiar nuevos datos, se agrega una fila al principio, por lo que los datos contenidos en la columna A se desplazan un lugar hacia abajo.
EL problema es que el rango de la función Contar.Si pasó de A1:A10000 original a A2:A10001.
Lo mismo me pasa si coloco como rango $A$1:$A$10000 , igual me lo corre a $A$2:$A$10001
Debo mantener el rango original para hacer la búsqueda
Alguna idea?

Gracias
Gustavo


----------



## Jaafar Tribak (Aug 27, 2010)

gustavomeeuwes said:


> Hola Greg y Jaafar:
> Nuevamente gracias por vuestra dedicación y preocupación.
> Después de seguir buscando los errores y tratando a su vez de aprender y no molestarlos a cada rato, pude solucionar el problema.
> Hice una copia totalmente limpia de mi planilla original, y me desaparecieron las referencias al libro en las macros, cuando tengo este libro sólo abierto. Quedan solamente con el nombre de la macro y cuando guardo este libro con el otro nombre, puedo ejecutar esas macros sin problemas. No tengo que modificar nada. No sé si puede ser que estuviese arrastrando "basura" y eso me complicaba. Además mi planilla pasó de pesar 2.5 Mb a 200 Kb, a pesar de mantener todos los formatos, colores, etc. El contenido es el mismo pero se redujo el tamaño. En esta planilla limpia hago pruebas, corro las macros y el tamaño se mantiene, como debería ser.
> ...


 
Hola Gustavo.

Proceda de la forma siguiente:

1- Seleccione el Rango _A1:A10000_ y dale un Nombre mediante el _Name Box_ situado a la izquierda de la barra de Formulas . por ejemplo valdria bien el nombre _*MyRango*_ 

2- Reemplaze la Funcion : _Contar(A1:A10000)_ por _*Contar(MyRango)*_

Asi se puede mantener el rango original aunque se agregen nuevas filas el pricipio.


----------



## gustavomeeuwes (Aug 27, 2010)

Nuevamente gracias Jaafar.
Vuestra ayuda me ha servido de mucho.
Espero no volver a molestarlo, al menos por esta planilla.
Un cordial saludo
Gustavo


----------

