Correr cada cierto tiempo de forma automática una macro

Mi pregunta es la sigte. ¿Es posible ponerle una condición a la macro que me creaste la cual abre todos los archivos de la carpeta (Control Pagos) para que se ejecute ella sola semanalmente sin tener que ejecutarla yo?

1

1 respuesta

Respuesta
1

H o l a:

En VBA el código sería así:

En los eventos de ThisWorkbook:

Private Sub Workbook_Open()
'Por.Dam
    VerificarHora
End Sub

Significa que cuando abres el libro se ejecuta la macro VeriricarHora. En esta verificación se puede poner la hora, la fecha o el periodo.


Ahora en un módulo:

Sub VerificarHora()
'Por.Dante Amor
    If Hoja3.[A1] <> Day(Date) Then
        Hoja3.[A1] = ""
        Hoja3.[B1] = ""
    End If
    If Day(Date) = 1 Then
        If Hoja3.[B1] = "" Then
            If Time >= TimeSerial(12, 0, 0) Then
                Hoja3.[A1] = Day(Date)
                Hoja3.[B1] = "x"
                macro1
            End If
        End If
    End If
    Application.OnTime Now + TimeValue("00:01:00"), "VerificarHora"
End Sub

La macro VeriricarHora, se ejecutaría cada minuto, todo el día, todos los días, mientras el libro esté abierto y mientras la macro no sea detenida.

Entonces cada minuto revisará el día y la hora, si es día 1 y la hora es igual a las 12 del medio día, se ejecuta la macro1.

Como el tiempo no es exacto a las 12:00, ya que la macro se está ejecutando cada minuto, puede ser que revise la hora a las 11:59:30 y la siguiente revisión será a las 12:00:30, entonces ya no son las 12:00:00 en punto, por lo que la condición sería si es mayor o igual a 12:00:00. Es por eso que en Hoja3, se guarda el día y un indicador de que la macro ya se ejecutó, es para que no se ejecute varias veces el mismo día.

Cuando el día cambie, entonces volverán los indicadores a "" y si es día 1, entonces se ejecutará nuevamente la macro, solamente una vez en el día.


Todo lo anterior es el código y el modo del funcionamiento. Pero no es recomendable tener una macro en ejecución todo el tiempo (latente), ejecutándose cada minuto, o cada segundo, eso provocará que los cálculos en tu libro sean más lentos.


Para eso te recomiendo que programes una tarea en windows.

Inicio / Todos los programas / Accesorios / Herramientas / Tareas programadas

En la siguiente ventana presiona doble click sobre Agregar tarea programada:

En la siguiente ventana, selecciona la aplicación de Microsoft Excel, Presiona el botón Examinar, selecciona el archivo que contiene la macro que quieres ejecutar (abrirlibros). Siguiente

Selecciona el periodo: Semanalmente. Siguiente

Hora de inicio: 08:00:00 am. Siguiente

Cada 52 Semanas. (Todo el año).

Selecciona el día, por ejemplo jueves. Siguiente

Pon tu usuario y un password. Siguiente

Finalizar.

La macro que se ejecute al abrir el libro, al terminar, deberá cerrar el libro.


Hola, estoy haciendo una prueba y me esta dando este error: 

el objetivo es hacer que el sistema abra el archivo que tiene la macro (AbrirArchivos) y la ejecute de manera automatica para que esta a su ves ejecute las macros que estan en los archivos que estan en la carpeta ¨Control Pagos¨

Ya entendí el objetivo.

La mejor opción es que programes la tarea, para que windows, se encargué de abrir el archivo, una vez que windows abra el archivo, la macro se ejecutará en automático.

Según el mensaje de advertencia: Falta información de cuenta.

Revisa que hayas capturado bien todos los campos, usuarios, password.

Revisa que seas el administrador del equipo.

Revisa que estés entrando con un usuario al equipo.


¿Se requiere entrar con usuario a la maquina?

Porque yo estoy entrando a la misma sin usuario ni password.

No lo sé.

Tendrás que seguir el procedimiento para programar tareas.

Sigue paso a paso lo siguiente:

1. Abre tu archivo que tiene la macro abrirlibros

2. En los eventos de ThisWorkbook pon la siguiente macro:

Private Sub Workbook_Open()
'Por.Dam
    VerificarHora
End Sub
Instrucciones para poner la macro en los eventos ThisWorkbook
1. Abre tu libro de excel
2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
3. Del lado izquierdo dice: VBAProject, abajo dale doble click a ThisWorkbook
4. Del lado derecho copia la macro

3. En un módulo pon la siguiente macro

Sub VerificarHora()
'Por.Dante Amor
    dia = UCase(Format(Date, "dddd"))
    If dia = "JUEVES" Then
        hora = Time
        If Time >= TimeSerial(11, 0, 0) And Time <= TimeSerial(11, 59, 0) Then
            abrirlibros
        End If
    End If
    Application.OnTime Now + TimeValue("01:00:00"), "VerificarHora"
End Sub

Cambia la palabra "JUEVES" por el día que quieras.

La macro se ejecutará cada semana a las 11 de la mañana.


Ya hice una prueba con el programa de tarea y si necesitaba tener ID y PW, pero no hace lo que deseo porque solo habre el archivo pero no ejecuta la macro.

Voy a hacer la prueba con lo que me enviaste ahora y te dejo saber.

SAludos,

MG

Debo quitar esta macro del modulo antes de poner la macro (verificarhora)? 

Sub AbrirArchivos()
'Por.Dante Amor
Set l1 = ThisWorkbook
ruta = l1.Path & "\Control Pagos Nuevo\"
arch = Dir(ruta & "*.xls*")
'
Do While arch <> ""
Set l2 = Workbooks.Open(ruta & arch)
l2.Close True
arch = Dir()
n = n + 1
Loop
'
MsgBox "Se abrieron " & n & " libros"
End Sub

Solamente sigue estos pasos,:

Sigue paso a paso lo siguiente:

1. Abre tu archivo que tiene la macro abrirlibros

2. En los eventos de ThisWorkbook pon la siguiente macro:

Private Sub Workbook_Open()
'Por.Dam
    VerificarHora
End Sub
Instrucciones para poner la macro en los eventos ThisWorkbook
1. Abre tu libro de excel
2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
3. Del lado izquierdo dice: VBAProject, abajo dale doble click a ThisWorkbook
4. Del lado derecho copia la macro

3. En un módulo pon la siguiente macro

Sub VerificarHora()
'Por.Dante Amor
    dia = UCase(Format(Date, "dddd"))
    If dia = "JUEVES" Then
        hora = Time
        If Time >= TimeSerial(11, 0, 0) And Time <= TimeSerial(11, 59, 0) Then
            abrirlibros
        End If
    End If
    Application.OnTime Now + TimeValue("01:00:00"), "VerificarHora"
End Sub

Cambia la palabra "JUEVES" por el día que quieras.

La macro se ejecutará cada semana a las 11 de la mañana.

Te decia que tengo la macro que te muestro arriba en el "modulo1" que se llama "Abrirarchivos" NO "Abrirlibros" la cual abre todos los archivos de la carpeta "Control de Pagos". Entonces para colocar la macro "verificarhora" debo insertar otro modulo.

Para que se ejecute debo tener el archivo abierto o puede estar cerrado?

En esta macro yo le puse abrirlibros, si tú sabes que se llama abrirarchivos, cambia el nombre.

Sub VerificarHora()
'Por.Dante Amor
    dia = UCase(Format(Date, "dddd"))
    If dia = "JUEVES" Then
        hora = Time
        If Time >= TimeSerial(11, 0, 0) And Time <= TimeSerial(11, 59, 0) Then
            abrirlibros
        End If
    End If
    Application.OnTime Now + TimeValue("01:00:00"), "VerificarHora"
End Sub

Ejecuta la macro VerificarHora, solamente abre la macro VerificarHora y presiona F5 para que se ejecute. No cierres el libro, nunca cierres el libro, la macro se estará ejecutando cada hora. No apagues la máquina, si apagas o cierras el libro la macro se detendrá, así que tu libro con la macro VerificarHora, deberá estar SIEMPRE abierto.

R ecurda valorar la respuesta.

Me esta dando un error en la compilacion, y me esta sombreando al apalabra "abrirarchivos"

Luego de colocar en "Thisworkbook"

Private Sub Workbook_Open()
'Por.Dam
    VerificarHora
End Sub

Coloque la macro "abrirarchivos" en  modulo2 y la macro "verificarhora" la puse en modulo1. asi si me acepto la compilacion.

Luego trate de hacer una prueba seleccionando el dia de hoy donde esta "jueves" y cambiando la hora, pero no ejecuto la macro.

Dante, determine que tenia el servicio de tareas programadas deshabilitado en las aplicaciones de windows por eso me daba el error que te envíe, pero ya lo habilite e hice una prueba y ejecuto la macro sin la necesidad de tener abierto el archivo, por lo cual pienso usarlo en lugar de la macro.

Gracias de nuevo hermano.

MG

Puedes poner una pantalla o cómo habilitaste el servicio de tareas programadas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas