Como Agendar uma Macro no Excel para Rodar em Horário Específico

Para agendar uma macro para rodar em horário específico, use Application.OnTime TimeValue("14:30:00"), "NomeDaMacro" se o Excel puder ficar aberto esperando até esse horário; se precisar que a macro rode mesmo com o Excel fechado, use o Agendador de Tarefas do Windows para abrir um script que inicia o Excel, roda a macro e fecha tudo automaticamente no horário definido.

Você já precisou que uma planilha atualizasse dados, gerasse um relatório ou enviasse um e-mail automaticamente todo dia num horário específico, sem precisar lembrar de abrir o arquivo e clicar em Executar Macro manualmente?

Depender da memória de alguém para rodar uma macro num horário certo é um processo frágil: um esquecimento, uma reunião que atrasa, um dia de férias, e o relatório simplesmente não sai naquele dia, ou sai atrasado, gerando decisões tomadas com dados desatualizados.

Neste artigo iremos mostrar duas formas de agendar a execução automática de uma macro: o comando Application.OnTime, para quando o Excel pode continuar aberto, e o Agendador de Tarefas do Windows combinado com um script simples, para rodar a macro mesmo com o Excel fechado.

DOMINE EXCEL COMIGO

QUERO APRENDER EXCEL

Application.OnTime: agendando dentro do próprio Excel

O método OnTime do objeto Application agenda a execução de uma macro para um horário específico, desde que a pasta de trabalho continue aberta até lá. A sintaxe básica recebe o horário desejado e o nome da macro (Sub) que deve rodar:

Sub AgendarMacro()
    Application.OnTime TimeValue("14:30:00"), "AtualizarRelatorio"
End Sub

Sub AtualizarRelatorio()
    ' código que atualiza o relatório
    MsgBox "Relatório atualizado às " & Now
End Sub

Ao rodar AgendarMacro (uma vez, manualmente ou na abertura do arquivo), o Excel programa a execução de AtualizarRelatorio para as 14h30 daquele mesmo dia. Se o horário informado já tiver passado quando a macro de agendamento rodar, o Excel executa AtualizarRelatorio imediatamente, sem esperar até o dia seguinte.

Repetindo a execução automaticamente todos os dias

Para que a macro rode todo dia no mesmo horário, sem precisar reagendar manualmente, basta que a própria macro, ao final da execução, reagende a si mesma para o dia seguinte:

Sub AtualizarRelatorio()
    ' código que atualiza o relatório
    Application.OnTime Now + TimeValue("24:00:00"), "AtualizarRelatorio"
End Sub

Com Now + TimeValue("24:00:00"), a próxima execução é agendada para exatamente 24 horas depois da execução atual. Para que esse ciclo comece automaticamente assim que o arquivo é aberto, coloque a primeira chamada de Application.OnTime dentro do evento Workbook_Open, no módulo ThisWorkbook:

Private Sub Workbook_Open()
    Application.OnTime TimeValue("14:30:00"), "AtualizarRelatorio"
End Sub

Assim, todo dia que alguém abrir o arquivo, a macro já se agenda para as 14h30 automaticamente, e a partir daí continua se reagendando sozinha a cada execução, desde que o arquivo continue aberto.

Cancelando um agendamento

Se for necessário cancelar um horário já agendado (por exemplo, antes de fechar o arquivo, para não deixar um agendamento pendente gerando erro), use o mesmo comando com o parâmetro Schedule:=False, informando o horário exato que havia sido agendado:

Application.OnTime EarliestTime:=horaAgendada, Procedure:="AtualizarRelatorio", Schedule:=False

Para isso funcionar, é preciso guardar o valor exato do horário agendado numa variável (declarada em nível de módulo, para não se perder entre chamadas), já que o cancelamento exige o mesmo horário usado no agendamento original.

Limitação do OnTime: só funciona com o Excel aberto

O Application.OnTime só dispara se a pasta de trabalho que contém a macro (ou o próprio Excel, dependendo de como foi implementado) continuar aberta até o horário agendado. Se o Excel for fechado antes do horário chegar, ou se o computador for desligado, o agendamento simplesmente não acontece. Para tarefas que realmente precisam rodar de forma confiável, mesmo com ninguém usando o computador, é preciso uma abordagem diferente: o Agendador de Tarefas do Windows.

Agendador de Tarefas do Windows: rodando a macro mesmo com o Excel fechado

A estratégia aqui é criar um pequeno script que abre o Excel, abre o arquivo específico, executa a macro desejada, salva e fecha tudo — e programar o Windows para rodar esse script no horário certo, independente de o Excel estar aberto ou fechado naquele momento. O script mais simples para isso é um arquivo VBScript (extensão .vbs), que não precisa de nenhuma instalação extra no Windows:

Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
Set objWorkbook = objExcel.Workbooks.Open("C:\Relatorios\Vendas.xlsm")
objExcel.Run "Vendas.xlsm!AtualizarRelatorio"
objWorkbook.Close SaveChanges:=True
objExcel.Quit

Salve esse conteúdo num arquivo de texto com a extensão .vbs, por exemplo RodarMacro.vbs. Repare no parâmetro objExcel.Run "Vendas.xlsm!AtualizarRelatorio" — o formato é o nome do arquivo, uma exclamação, e o nome da macro (Sub) que deve ser executada dentro dele.

Com o script pronto, abra o Agendador de Tarefas do Windows (digite “Agendador de Tarefas” no menu Iniciar), clique em Criar Tarefa Básica, dê um nome à tarefa, escolha o gatilho (diariamente, semanalmente, ou um horário específico) e, na etapa de Ação, escolha Iniciar um Programa, apontando para wscript.exe como programa e o caminho completo do arquivo .vbs como argumento.

Situação Solução recomendada
Arquivo fica aberto o dia todo, em uso constante Application.OnTime
Arquivo deve rodar sozinho, mesmo com ninguém usando o computador Agendador de Tarefas + script .vbs

Um cuidado importante: o arquivo aberto pelo script precisa estar numa pasta cadastrada como Local Confiável na Central de Confiabilidade do Excel (ou ter a macro assinada digitalmente com um certificado confiável), para que a execução automática não pare esperando o clique manual em Habilitar Conteúdo, já que não há ninguém na frente da tela nesse horário para clicar.

Disponibilidade

Application.OnTime está disponível em VBA no Excel para Windows a partir da versão 2007, incluindo 2010, 2013, 2016, 2019, 2021 e Excel 365. No Excel para Mac, o OnTime existe, mas o Agendador de Tarefas do Windows não tem equivalente direto — o Mac usa o launchd para tarefas agendadas do sistema, com configuração bem diferente. O Excel Online não executa macros VBA nem scripts locais. O Google Sheets tem um recurso equivalente ao agendamento por horário fixo através dos gatilhos de tempo (time-driven triggers) do Apps Script, configurados no próprio editor de scripts, sem precisar de nenhuma ferramenta externa do sistema operacional.

Perguntas frequentes

Application.OnTime funciona se o computador estiver em modo de suspensão ou hibernação no horário agendado?

Não. Se o computador estiver suspenso, hibernando ou desligado no horário agendado, o Application.OnTime não dispara, já que depende do Excel estar rodando ativamente naquele momento. Para tarefas que precisam de garantia mesmo com o computador ocioso, use o Agendador de Tarefas do Windows, configurado para acordar o computador se necessário (opção disponível nas condições da tarefa).

Como faço a macro rodar automaticamente assim que o arquivo é aberto, sem precisar clicar em nada?

Coloque o código de agendamento (ou o próprio código da tarefa) dentro do evento Workbook_Open, no módulo ThisWorkbook do editor VBA. Esse evento dispara automaticamente toda vez que a pasta de trabalho é aberta, seja manualmente por uma pessoa ou por um script como o do Agendador de Tarefas.

É seguro deixar o Agendador de Tarefas abrir o Excel automaticamente sem ninguém presente?

Sim, desde que a pasta onde o arquivo fica salvo esteja cadastrada como Local Confiável na Central de Confiabilidade do Excel, ou que a macro esteja assinada digitalmente com um certificado marcado como confiável. Sem isso, o Excel pode ficar esperando indefinidamente por um clique em “Habilitar Conteúdo” que nunca vai acontecer, travando a execução automática.

Veja também: Macros e Segurança no Excel: Como Assinar Digitalmente e Habilitar com Confiança (importante para que a execução automática agendada não fique travada esperando o aviso de segurança) e VBA para Iniciantes.

Compartilhe ou Comente

Se você curtiu esse artigo aonde mostramos como usar Application.OnTime para agendar uma macro dentro do próprio Excel, e como combinar o Agendador de Tarefas do Windows com um script para rodar a macro automaticamente mesmo com o Excel fechado, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.

Você tem alguma rotina no Excel que precisa rodar todo dia num horário certo? Já pensou em automatizar esse agendamento em vez de fazer manualmente? Conta para nós nos comentários!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *