Macro AUTO_OPEN de forma indefinida

Tengo creada una macro Auto_Open, que cuando está el libro de excel abierto, cada 1/2 hora actualiza una consulta web y me pega los datos actualizados en otra hoja del mismo libro. El problema que tengo es que esa macro Auto_Open sólo la ejecuta 24 horas, cuando llega a la hora en que se inició dicha macro se detiene, teniendo que cerrar y abrir de nuevo el fichero, me interesaría que esa macro funcionase de forma indefinida en lo que el libro esté abierto.
Esta es la macro:
Sub Auto_Open()
Application. OnTime TimeValue("00:00"), "actualizacion_automatica"
Application. OnTime TimeValue("00:30"), "actualizacion_automatica"
Application. OnTime TimeValue("01:00"), "actualizacion_automatica"
...
...
...
Application. OnTime TimeValue("22:30"), "actualizacion_automatica"
Application. OnTime TimeValue("23:00"), "actualizacion_automatica"
Application. OnTime TimeValue("23:30"), "actualizacion_automatica"

End Sub

He probado con un bucle:

Do While Sheets("DATOS").Range("B3").Value = "Adanero"

...

...

Loop

Y aparece el reloj de arena y se bloque el fichero, no tiene que ser necesariamente con Auto_Open, lo que si es imprescindible es que la macro se ejecute cada 1/2 hora y no para nunca.

1 respuesta

Respuesta
1

Lo primero es que Auto_Open se ejecuta sólo al abrir el libro. Por tanto en tu código funciona bien. Ejecuta tantas veces tu procedimiento como líneas tiene. Para que no pare o bien haces un bucle infinito con llamadas periódicas (lo que me parece que has hecho es un bucle infinito que hace llamadas, pero el bucle no se para después de cada llamada por es se te bloquea) o bien vas llamando una y otra vez al timer.

Por cuestiones de estilo y facilidad no me gusta meter en Auto_open aquello que no sea inicialización, pero no por nada más. Por eso te propongo lo siguiente:

Sub Auto_Open ()

  call Hacer_Algo() 'o llamar a Timer si la primera vez no es necesaria la actualización

end sub

Sub Timer()
' Ejecuta cada media hora
  Application.OnTime Now + TimeValue("00:30:00"), "Hacer_Algo"
End Sub
Sub Hacer_Algo()

Call actualización_automatica
Call Timer 'vuelvo a poner el timer
End Sub

Perfecto, pero me surge una duda, ¿Se podría hacer que se ejecutase a las horas justas?

10:00

10:30

11:00

11:30

12:00

y así todas

Un Saludo

Sí, claro. Simplemente la primera vez llamas a la función con la hora inicial. Sería algo como:

Sub Auto_Open ()
Application.OnTime TimeValue("10:00:00"), "Hacer_Algo"

end sub

El resto se irá ejecutando cada 30 min, después de las 10:00 que es la primera hora.

Y ya por último, ¿no se podría poner en una celda la hora a la que quiero que empiece?

Según se me van arreglando las dudas quiero mejorar mi aplicación, pero prometo que ya es la última mejora.

Saludos

Sí. Solamente formatea una celda como texto, por ejemplo la A1 y escribe dentro por ejemplo "10:00:00". Ahora cambias la función como sigue:

Sub Auto_Open ()

Dim horaini as String

horaini = Range ("A1").value

Application.OnTime TimeValue(horaini), "Hacer_Algo"
end sub

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas