# Macros para graficos y horas



## Juan_snbdo (Jun 29, 2011)

Estimados señores, esperando see encuentren bien, necesito ver si me pueden ayudar en lo siguiente: tengo una macros que hace un grafico de un rango fijo y lo despliega en otra hoja (la siguiente): 

Sub Graf_TK1() 
Range("N23:Q31").Select 
Charts.Add 
ActiveChart.ChartType = xlLineMarkers 
ActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("N23:Q31"), PlotBy:=xlColumns 
ActiveChart.Location Where:=xlLocationAsObject, Name:="Graf_TK_1" 
With ActiveChart 
.HasTitle = True 
.ChartTitle.Characters.Text = "Estanque N°1" 
.Axes(xlCategory, xlPrimary).HasTitle = False 
.Axes(xlValue, xlPrimary).HasTitle = False 
End With 
End Sub 

Funciona bien, pero aún no encuentro la forma que al realizar el grafico vuelva a la hoja1 celda A1, se queda en la hoja Graf_TK_1 y cuando selecciona la hoja1, está en la celda que corresponde al área de datos del grafico. 

Otra cosa, es que esos datos son obtenidos desde un servidor OPC, y necesito llenar las celdas que dependiendo de la hora (ya solucione el problema de la hora), he tratado con la función =Si(“condición”, verdadero, falso) el caso es que necesito que cuando sea la condición sea falsa no ponga cero si no que actualice el valor cuando sea verdadero solamente, o sea, que copie el valor y lo mantenga hasta que llegue a esa hora nuevamente. 

Otra cosa, es saber cómo se puede hacer que una macros se ejecute sola, una vez habilitadas las macros. 
Espero no ser majadero y agradezco su respuesta 

<!-- google_ad_section_end -->


----------



## cgcamal (Jun 29, 2011)

Juan_snbdo said:


> Funciona bien, pero aún no encuentro la forma que al realizar el grafico vuelva a la hoja1 celda A1, se queda en la hoja Graf_TK_1 y cuando selecciona la hoja1, está en la celda que corresponde al área de datos del grafico.


Hola Juan,

Para esto agregale después del "End With" estas dos líneas:

```
Sheets("Hoja1").Activate
Range("A1").Activate
```
y para no ver los cambios que hace la macro agregate al inicio de la macro esta línea(después de Sub Graf_TK1):

```
Application.ScreenUpdating = False
```
 y al final (antes de End Sub) esta otra:

```
Application.ScreenUpdating = True
```



Juan_snbdo said:


> Otra cosa, es que esos datos son obtenidos desde un servidor OPC, y necesito llenar las celdas que dependiendo de la hora (ya solucione el problema de la hora), he tratado con la función =Si(“condición”, verdadero, falso) el caso es que necesito que cuando sea la condición sea falsa no ponga cero si no que actualice el valor cuando sea verdadero solamente, o sea, que copie el valor y lo mantenga hasta que llegue a esa hora nuevamente.


 Habría que ver cómo tenés los datos, o sea, en qué rango está el nuevo dato a tomar y en que rango el dato que será cambiado dependiendo la hora. Sería bueno que mostraras un archivo de muestra con datos lo más similares posible. Podría ser con VBA o con una fórmula como esta:

```
En A1=SI(HORA(AHORA())&":"&MINUTO(AHORA())="14:32",B1,C1)
en B1=3, en C1 =5
*Cambiar la hora para probar
```



Juan_snbdo said:


> Otra cosa, es saber cómo se puede hacer que una macros se ejecute sola, una vez habilitadas las macros.
> Espero no ser majadero y agradezco su respuesta
> <!-- google_ad_section_end -->


 Se puede hacer que una macro corra por eventos y posiblemente por otros medios, pero depende de cuál va a ser el disparador que tendrás para que la macro se ejecute. Al cambiar un dato en algún rango de cierta hoja, al llegar cierta hora o cada cierto período, etc.

Espero sea de ayuda,

Saludos cordiales.


----------



## Juan_snbdo (Jun 29, 2011)

Estimado Cesar
Agradeciendo mucho tu respuesta, mira te cuento, la Hora la tengo en formato de numeros del 0.00-23.99 , lo que necesito es disparar la copia del dato que tengo en una celda "a10" lo copie en la celda "b15" a las 0.00, el dato de "a10" lo copie en la celda "b16" a las 3.00, de esa forma necesito copiar los datos y eso que se repita durante todo el día en intervalos de tres horas, esto para generar el gráfico.
respecto a que una macros se ejecute al abrir un libro, es por esta macros:

Sub reloj()
'Mostramos la hora
ActiveSheet.Range("a1500") = Format(Now, "hh:mm:ss")
Application.OnTime (Now + TimeSerial(0, 0, 1)), "reloj"
End Sub

Que cada vez que abro el libro debo darle ejecutar y eso no es tan instuitivo para todos.
Ojala me puedas ayudar.

ATTE


Juan Sepúlveda


----------



## cgcamal (Jun 29, 2011)

Juan_snbdo said:


> Estimado Cesar
> Agradeciendo mucho tu respuesta, mira te cuento, la Hora la tengo en formato de numeros del 0.00-23.99 , lo que necesito es disparar la copia del dato que tengo en una celda "a10" lo copie en la celda "b15" a las 0.00, el dato de "a10" lo copie en la celda "b16" a las 3.00, de esa forma necesito copiar los datos y eso que se repita durante todo el día en intervalos de tres horas, esto para generar el gráfico.


Por nada, un placer Juan.

Referente a tu solicitud, esto se podría hacer con un código VBA que recalcule cada 3 horas las fórmulas que tenés en las hojas, pero tengo dudas aquí:
¿Actualizar B15 y B16 cada 3 horas? o,
¿Actualizar B15 a las 0:00, B16 a las 03:00, B15 a las 06:00, B16 a las 09:00, B15 a las 12:00 etc...?
¿La macro que genera el gráfico correría cada 3 horas o sólo actualizar los datos de origen del gráfico cada 3 horas?


Juan_snbdo said:


> respecto a que una macros se ejecute al abrir un libro, es por esta macros:
> 
> Sub reloj()
> 'Mostramos la hora
> ...


Para que se ejecute la macro al abrir el libro, debés agregar el código que necesitás que corra dentro del módulo "ThisWorkbook", que está al lado izquierdo del editor de VBA. Das doble click en ese módulo y arriba donde dice "General" seleccionar "Workbook". Con esto te aparecerá automáticamente el "Private Sub Workbook_Open()". Una vez hecho esto, colocá el código dentro de este Workbook_Open, dale guardar, cerrar y probate abrir el archivo para saber si funciona como necesitás.

Espero ayude.

Saludos cordiales


----------



## Juan_snbdo (Jun 29, 2011)

Estimado

Muchas gracias nuevamente, la idea es ir llenando cada tres horas una columna por ejemplo B1 ; B2...;B8 cada tes horas, o sea, el dato que hay en a1 que pase a las 0.00 a b1 , el dato de a1 que pase a b2 a las 3.00 , el dato de a1 que pase a b3 a las 6.00 eso es lo que necesito, asi podre llenar los datos para el gráfico cada tres horas, no es problema que al día siguiente se cambien los datos, la idea es una grafico diario.
Ojla me puedas ayudar y nuevamente te agradezco mucho tu ayuda.

ATTE

Juan Sepúlveda


----------



## cgcamal (Jun 29, 2011)

Juan,

Una opción para hacer lo que mencionás sería:

1-) En un módulo normal pegá este código:
(Aquí podés cambiar el intervalo de 3 horas a unos cuantos segundos para probar como funciona)

```
Sub Actualizar_Cada_3_Horas()
Dim Intervalo As Date, UltLinea as Integer

  Intervalo = Now + TimeValue("03:00:00") 'Para actualizar cada 3 horas
  Application.OnTime Intervalo , "Actualizar_Cada_3_Horas"

    If IsEmpty(Range("B1")) Then
        UltLinea = 1
    Else
        UltLinea = Range("B" & Rows.Count).End(xlUp).Row
    End If
    
    Cells(UltLinea + 1, "B") = Range("A1")
End Sub
```
2-) En módulo "ThisWorkBook" pegá este otro código:

```
Private Sub Workbook_Open()

     Call Actualizar_Cada_3_Horas

End Sub
```

3-) Ahora guardar libro y cerrarlo.
4-) Abrir libro y ver como inmediatamente coloca un valor en la siguiente celda vacía de columna B.
     (La macro se actualizará automáticamente cada intervalo después que es abierto el archivo) 

Espero te funcione correctamente.

Saludos cordiales.


----------



## Juan_snbdo (Jun 30, 2011)

Estimado Cesar

Junto con saludarte, te agradezco tu apoyo, te comento que la rutina que me enviaste solo copia el priemr valor en la celda, deje un intervalo de 30 seg, pero solo copia en una celda y actualiza la misma no va avanzando por la columna, me puedes  ayudar con eso, la idea es que avance por 8 celdas de una columna, otra cosa, son catorce columnas las que debo llenar desde 14 celdas iniciales, ese codigo habría que copiarlo 14 veces, una copia por columna?
Y nuevamente gracias por tu ayuda

Juan Sepúlveda


----------



## Juan_snbdo (Jun 30, 2011)

Cesar, si es posible te envío el archivo EXCEL donde estoy trabajando, para que veas de que se trata.
te escribo mi correo ja.sepulveda«arroba»gmail.com
Gracias

Juan Sepulveda


----------



## Greg Truby (Jun 30, 2011)

Hola César,

Me alegra ver que usted haya seguido tratando de mejorar sus habilidades en Excel y que esté tratando de ayudar a otros en los foros. 

Un par de comentarios - si entendí bien, Juan quiere que la rutina corra a las 3, a las 6, etc., no de ahora en 3, de ahora en 6, ...

Podemos usar la función de hoja CEILING() para calcular la próxima hora correcta. 
	
	
	
	
	
	



```
Sub ActualizarAHoraX()
 
    Const c_strMultiplesDeEsta As String = "03:00:00", _
          c_strThisProcName     As String = "ActualizarAHoraX"
 
    Dim celTarget       As Excel.Range, _
        dtmIntervalo    As Date, _
        lngLineaNueva   As Long, _
        wf              As Excel.WorksheetFunction
 
    Set wf = Application.WorksheetFunction
 
    '// {falta código que asegura que el cuaderno correcto
    '//  esté activado y que la hoja correcta esté activada}
 
    Set celTarget = Range("B" & Rows.Count).End(xlUp)
 
    With celTarget
        Set celTarget = .Offset(-(Len(.Formula) > 0))
    End With
 
    celTarget.Value = Range("A1").Value
    Let dtmIntervalo = wf.Ceiling(Now, TimeValue(c_strMultiplesDeEsta))
 
    Application.OnTime dtmIntervalo, c_strThisProcName
End Sub
```
 
También noten que si vamos a correr una rutina de forma automatizada, es prudente asegurar que afectamos el cuaderno y la hoja deseada y no los que están activados en el momento que corre.

Dejo a usted y Juan trabajar en eso. 

_Hola Juan,_

_Ya edité a su post aquí para que su dirección de correo-e no sea completo. Si usted pone su dirección complete y exacta, los "bots" la capta y usted recibirá una avalancha de "spam"._


----------



## Juan_snbdo (Jun 30, 2011)

Muchas gracias Greg, por lo del correo, no tenia idea de eso, agradezco su aporte, ahora voy a probar el codigo, ya que debo adaptarlo a lo que tengo realmente y no me  manejo muy bien en este tema, les aviso si tengo exito o no, muchas gracias nuevamente, saludos.

Juan


----------



## Juan_snbdo (Jun 29, 2011)

Estimados señores, esperando see encuentren bien, necesito ver si me pueden ayudar en lo siguiente: tengo una macros que hace un grafico de un rango fijo y lo despliega en otra hoja (la siguiente): 

Sub Graf_TK1() 
Range("N23:Q31").Select 
Charts.Add 
ActiveChart.ChartType = xlLineMarkers 
ActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("N23:Q31"), PlotBy:=xlColumns 
ActiveChart.Location Where:=xlLocationAsObject, Name:="Graf_TK_1" 
With ActiveChart 
.HasTitle = True 
.ChartTitle.Characters.Text = "Estanque N°1" 
.Axes(xlCategory, xlPrimary).HasTitle = False 
.Axes(xlValue, xlPrimary).HasTitle = False 
End With 
End Sub 

Funciona bien, pero aún no encuentro la forma que al realizar el grafico vuelva a la hoja1 celda A1, se queda en la hoja Graf_TK_1 y cuando selecciona la hoja1, está en la celda que corresponde al área de datos del grafico. 

Otra cosa, es que esos datos son obtenidos desde un servidor OPC, y necesito llenar las celdas que dependiendo de la hora (ya solucione el problema de la hora), he tratado con la función =Si(“condición”, verdadero, falso) el caso es que necesito que cuando sea la condición sea falsa no ponga cero si no que actualice el valor cuando sea verdadero solamente, o sea, que copie el valor y lo mantenga hasta que llegue a esa hora nuevamente. 

Otra cosa, es saber cómo se puede hacer que una macros se ejecute sola, una vez habilitadas las macros. 
Espero no ser majadero y agradezco su respuesta 

<!-- google_ad_section_end -->


----------



## cgcamal (Jun 30, 2011)

Hola *Greg *de nuevo, mucho gusto!!!, cuanto tiempo!!!,

De hecho si, bastante me han ayudado en este y otros foros y ahora se un poquito más que antes y 
lo menos que puedo es tratar de agradecer de la misma forma, respondiendo cuando puedo a otras 
personas que necesitan soporte en algunos temas. En casi todas las preguntas que trato de responder 
hay algo que me gustaría hacerlo de otra forma e investigo cómo hacerlo y en el proceso trato de ayudar 
y de paso aprendo algo nuevo de Excel.

Normalmente busco las preguntas sin respuesta porque los verdaderos expertos y toda la gente aquí 
responden muy rápido y no dan tiempo de reaccionar jajaja, cuando empiezo a ver o empiezo a pensar 
cómo solucionar algo, justo en ese momento alguien la está respondiendo

Referente a la macro que nos enseñás, justo estuve pensando cómo establecer que comenzara a una 
hora específica que definiera Juan después de abrir el libro y después de llegada esa hora que se repitiera 
cada cierto intervalo de tiempo. Pues logré hasta ahora que me funcionara sólo con "Now" + intervalo. 

He probado tu solución tratando de ver qué aprendo y no entendí muy bien qué hacés en la segunda 
asignación de CelTarget

```
Set celTarget = .Offset(-(Len(.Formula) > 0))
```
Aparte de eso probé tu código y le agregué un With como se ve abajo para asegurar que la macro corre 
sobre la hoja deseada(Hoja1 para ejemplificar). Entonces cCambié a intervalos de 10 segundos en lugar 
de 3 horas, pero al iniciar el libro me tira miles de copias del valor de A1. Viendo esto, cambié el intervalo 
a 10 minutos, pero en lugar de ejecutar la macro cada 10 minutos, lo hace cada 15 segundos mas o menos, 
no sé el porqué de este comportamiento.

```
Sub ActualizarAHoraX()
 
    Const c_strMultiplesDeEsta As String = "00:10:00", _
          c_strThisProcName     As String = "ActualizarAHoraX"
 
    Dim celTarget       As Excel.Range, _
        dtmIntervalo    As Date, _
        lngLineaNueva   As Long, _
        wf              As Excel.WorksheetFunction
 
    Set wf = Application.WorksheetFunction
 With Sheets("Hoja1") [COLOR=DarkGreen]'Esta línea para asegurar que la macro corre en "Hoja1", cambiar a la hoja real.[/COLOR]
    Set celTarget = .Range("B" & Rows.Count).End(xlUp)
 
    With celTarget
        Set celTarget = .Offset(-(Len(.Formula) > 0))
    End With
 
    celTarget.Value = .Range("A1").Value
 End With
    Let dtmIntervalo = wf.Ceiling(Now, TimeValue(c_strMultiplesDeEsta))
 
    Application.OnTime dtmIntervalo, c_strThisProcName
End Sub
```
*Hola Juan de nuevo,
 *
Referente a:


			
				Juan_snbdo said:
			
		

> te comento que la rutina que me enviaste solo copia el priemr valor en  la celda, deje un intervalo de 30 seg,
> pero solo copia en una celda y  actualiza la misma no va avanzando por la columna


Tenés razón, por alguna razón la copie mal al pegarla en el post, el error porque sólo copia una vez el 
valor de A1 es por tener 1 en lugar de 0 en la línea mostrada abajo, que es la macro corregida.

```
Sub Actualizar_Cada_3_Horas()
Dim dTime As Date
  dTime = Now + TimeValue("00:00:10")
  Application.OnTime dTime, "Actualizar_Cada_3_Horas"

With Sheets("Hoja1") [COLOR=DarkGreen]'Esta línea para asegurar que la macro corre en "Hoja1", cambiar a la hoja real.[/COLOR]
    If IsEmpty(.Range("B1")) Then
[COLOR=Red]        UltLinea = 0[/COLOR]
    Else
        UltLinea = .Range("B" & Rows.Count).End(xlUp).Row
    End If
    
    Cells(UltLinea + 1, "B") = .Range("A1")
End With
End Sub
```
Favor probar nuevamente si así te funciona.

Saludos cordiales.


----------



## Greg Truby (Jun 30, 2011)

cgcamal said:


> ...He probado tu solución tratando de ver qué aprendo y no entendí muy bien qué hacés en la segunda
> asignación de CelTarget
> 
> ```
> ...


 
En la hoja en sí, Excel evalua CIERTO a un uno y FALSO a un cero. Pero en VBA, CIERTO tiene un valor de -1, no +1 (FALSO siempre es un cero). Entonces la seña de restar convierta la expresión a un uno positivo.

Póngase en una celda que tiene un valor y vaya a la ventana _Immediate_ y ponga

*? -(len(activecell.formula) = 0)*

y usted verá un cero. Ahora seleccione una celda vacia y pruebe lo otra vez y verá un uno.

¿Y por qué probar el largo de la fórmula en vez de usar ISEMPTY() en VBA? Porque ISEMPTY() tanto como ISBLANK() puede devolver FALSO a pesar de que la celda está vacia.


----------



## cgcamal (Jul 1, 2011)

Gracias por la explicación Greg,

2 pájaros de un tiro: 

1-) Nunca había usado/probado la ventana inmediato y ya sé al menos lo básico de para qué sirve y como usarla (? para print),
2-) Entiendo muy bien ahora lo que estás expresando y haciendo en esa expresión de "-(Len(.Formula) > 0)" después de probar 
     en la ventana inmediato con el ejemplo que me sugeriste.

Por eso te digo, siempre tratando de ayudar a alguien, en el intento aprendo algo interesante que sirve para acrecentar mis 
conocimientos y para hacer en la próxima vez, códigos más eficiente y en menos tiempo.

Muchas gracias de nuevo Greg por tu amable ayuda!!!

Saludos cordiales.


----------



## Juan_snbdo (Jul 5, 2011)

Estimado Cesar

Disculpa la demora, pero me encontraba en terreno y no tengo tengo acceso al PC, probe el ultimo codigo que me enviaste y lamentablemente no funciona, ahora no copia el valor ni en la primera celda, perdona que sea majadero, pero yo conozco pocas instrucciones de VBA y de VB, pero esto se podría hacer con un ciclo FOR incrementando el valor de la celda y la función copiar cuando se cumpla la condición de hora, te lo escribo así por que no se la sintaxis del codigo, ojala me puedas ayudar

Un saludo

Juan


----------



## Greg Truby (Jul 5, 2011)

Juan_snbdo said:


> ...pero esto se podría hacer con un ciclo FOR incrementando el valor de la celda y la función copiar cuando se cumpla la condición de hora...


 
Si habla de dejar un bucle corriendo todo el tiempo, chequeando cada micro-segundo para ver si ya es la hora de hacer tal y tal, la respuesta sería ¡NO! [y  × 10 ] Usted no va a querer tener un bucle corriendo todo el tiempo poniendo su CPU al 100%. OnTime sí es la herramienta correcta.

Si entendí mal y habla de usar un bucle para encontrar la celda abierta, la forma que presenta César de utilizar .END(xlUp) es mucho más eficiente que un bucle para esto.

También para que sepa, ya en casos donde han habido varias versiones de código presentado y cambios hechos, siempre es buena idea poner el código es está usando en su post para asegurar que todos estémos en la misma página.


----------



## Juan_snbdo (Jul 5, 2011)

Greg

Muchas gracias por su comentario, es bueno saber eso, puese como ejemplo lo del ciclo for para poder explicarme mejor, como lo comentaba anteriormente soy bastante debil en el conociemiento de los codigos y sintaxis de VBA, por eso hago preguntas bien basicas, lo que necesito es ir llenando columnas de 8 celdas cada 3 horas (una celda a la hora cero, la siguiente a la hora 3 y así), el valor viene de una celda fija que varia constantemente, por eso la comparación de horas, es para ir avanzando en la columna, si alguno desea le puedo enviar el archivo excel para que lo revisen y ahí pueden ver como es realmente.
Nuevamente les agradezco mucho su ayuda.

ATTE


Juan


----------



## cgcamal (Jul 5, 2011)

Hola Juan,

Entiendo que necesitás llenar un rango de celdas cada 3 horas para completar un día (3x8=24 horas). Lo que no entiendo aún es porqué no funciona el 
código para vos, para mi funciona, no creo que sea la versión de Excel pero sería bueno saber qué versión de Excel tenés.

Aparte de eso sería bueno que subieras el archivo a algún servidor de archivos gratuito para que mostraras el enlace de descarga y poderlo bajar y así ver asegurar que funcione el archivo con que trabajás y agregar nuevamente detallado paso a paso el funcionamiento que se espera estaría mucho mejor.

Saludos cordiales


----------



## Juan_snbdo (Jul 5, 2011)

Estimado Cesar

Hice funcionar el codigo que me mandaste en otro libro, funciona, realiza el copiado del valor de una celda a otras avanzando, pero no se detiene, continua avanzando.
Hice el ejercicio de poner en una celda el valor de la hora actual (use =ahora() )y ahí se detiene el avance del copiado, se queda quieta.
Creo que la rutina que me enviaste entra en conflicto con algo que tengo funcionanado en el libro, y debe ser el siguiente programita:

""""

Private Sub Workbook_Open()
Application.ScreenUpdating = False
'Mostramos la hora
ActiveSheet.Range("a1500") = Format(Now, "hh:mm:ss")
Application.OnTime (Now + TimeSerial(0, 0, 1)), "reloj"
Application.ScreenUpdating = True
Call Actualizar_Cada_3_Horas
End Sub

""""

Que esta en el Workbook, ahí debe estar el problema, trata de enviarme tu correo para hacerte llegar el proyecto, ahí yo creo que veras bien mi problema.

ATTE

Juan


----------



## cgcamal (Jul 5, 2011)

Que bien que funcionó en tu caso de alguna forma, lo otro podría ser algo con el otro código que tenés como decís. Si querés enviar el archivo envié mi correo en mensaje privado. 

Saludos


----------



## Juan_snbdo (Jul 7, 2011)

Cesar, estoy probando el archivo que me enviaste, muchas gracias, en cuanto tenga novedades, te aviso.

ATTE

Juan


----------



## Juan_snbdo (Jun 29, 2011)

Estimados señores, esperando see encuentren bien, necesito ver si me pueden ayudar en lo siguiente: tengo una macros que hace un grafico de un rango fijo y lo despliega en otra hoja (la siguiente): 

Sub Graf_TK1() 
Range("N23:Q31").Select 
Charts.Add 
ActiveChart.ChartType = xlLineMarkers 
ActiveChart.SetSourceData Source:=Sheets("Hoja1").Range("N23:Q31"), PlotBy:=xlColumns 
ActiveChart.Location Where:=xlLocationAsObject, Name:="Graf_TK_1" 
With ActiveChart 
.HasTitle = True 
.ChartTitle.Characters.Text = "Estanque N°1" 
.Axes(xlCategory, xlPrimary).HasTitle = False 
.Axes(xlValue, xlPrimary).HasTitle = False 
End With 
End Sub 

Funciona bien, pero aún no encuentro la forma que al realizar el grafico vuelva a la hoja1 celda A1, se queda en la hoja Graf_TK_1 y cuando selecciona la hoja1, está en la celda que corresponde al área de datos del grafico. 

Otra cosa, es que esos datos son obtenidos desde un servidor OPC, y necesito llenar las celdas que dependiendo de la hora (ya solucione el problema de la hora), he tratado con la función =Si(“condición”, verdadero, falso) el caso es que necesito que cuando sea la condición sea falsa no ponga cero si no que actualice el valor cuando sea verdadero solamente, o sea, que copie el valor y lo mantenga hasta que llegue a esa hora nuevamente. 

Otra cosa, es saber cómo se puede hacer que una macros se ejecute sola, una vez habilitadas las macros. 
Espero no ser majadero y agradezco su respuesta 

<!-- google_ad_section_end -->


----------



## Juan_snbdo (Jul 25, 2011)

Estimado Cesar

Junto con saludarte, te cuento que he estado en terreno y no he podido ver este tema, para poder avanzar, disculpa la demora en la respuesta, pero tengo poco acceso a internet.

ATTE

Juan


----------



## cgcamal (Jul 26, 2011)

No hay problema Juan. Espero funcione como necesitás. 

Saludos cordiales.


----------

