Você já precisou rodar diariamente uma planilha do Excel? Recentemente me deparei com esse cenário, e como programador preguiçoso pensei: Não é possível que não de para automatizar isso! Encontrei uma solução relativamente simples e resolvi documentar.

Eu sempre escolho uma pessoa preguiçosa
para fazer um trabalho difícil… Porque ela encontrará uma forma fácil de fazê-lo.

Bill Gates

Vou explicar como você pode fazer isso usando o Agendador de Tarefas (Windows Task Scheduler – já vem instalado) para: Abrir; Executar Macros VBA; Salvar; Fechar o Excel. Essa solução permite uma ampla variedade de configurações de agendamento!

PARA O AGENDADOR FUNCIONAR O COMPUTADOR PRECISA ESTAR LIGADO

Pré-requisitos

Todos os pré-requisitos já vem instalados por padrão no Windows:

  • Agendador de Tarefas (Windows Task Scheduler)
  • Bloco de Notas (Ou algum editor de texto neutro)
  • CScript (C:\Windows\System32\cscript.exe)

Criando o arquivo VBS

O arquivo que fará toda a magia acontecer será um script VBS (Visual Basic Script). Caso você esteja familiarizado com VBA não terá dificuldades em entender os comandos do script.

Abra o Bloco de Notas e copie o conteúdo abaixo:

'Caminho completo para a planilha excel 
CaminhoArquivoExcel = "C:\Users\henrique\Documents\nome_da_planilha.xlsm" 
 
'Escopo e nome completo da macro para executar 
CaminhoMacro = "Module1.NomeDaMacro" 

'Criamos uma instância do excel 
Set ExcelApp = CreateObject("Excel.Application") 

'Você deseja que essa instância fique visível? 
ExcelApp.Visible = True  'or "False" 

'Previne que o Excel mostre alertas
ExcelApp.DisplayAlerts = False 

'Abrimos o arquivo excel 
Set wb = ExcelApp.Workbooks.Open(CaminhoArquivoExcel) 

'Executamos a macro 
ExcelApp.Run CaminhoMacro

'Salvamos o arquivo excel após a execução da macro 
wb.Save 

'Voltamos com o parâmetro de alertas para evitar problemas com outras planilhas 
ExcelApp.DisplayAlerts = True 
 
'Fechamos o arquivo Excel 
wb.Close 

'Fechamos a instância do Excel 
ExcelApp.Quit 
  
'Alerta para avisar quando a planilha for executada com sucesso 
MsgBox "Sua planilha foi executada automaticamente com sucesso às:" & TimeValue(Now), vbInformation 

Agora precisamos substituir algumas informações: 

  1. Troque o valor da variável CaminhoArquivoExcel para a localização exata do arquivo Excel que você deseja abrir. Importante colocar tanto o nome correto como a extensão.
  2. Troque o valor da variável CaminhoMacro para o valor exato da macro que você deseja rodar.
  3. Em ExcelApp.Visible você pode decidir se quer que a aplicação abra uma instância visível (true) ou que ela execute em segundo plano (false). Alguns add-ins não funcionam em segundo plano.
  4. MsgBox: Alerta com mensagem visível para o usuário caso a macro tenha rodado com sucesso, caso não deseje basta remover essa linha.

Vamos salvar esse arquivo com a extensão .vbs: No Bloco de notas na hora de salvar no campo nome do arquivo digite algo parecido com: excelautomatico.vbs e em tipo de arquivo selecione: Todos os arquivos. De uma boa se todos os caminhos estão corretos e salve esse arquivo em algum lugar seguro onde ninguém possa acidentalmente remover. Anote o caminho do arquivo salvo pois precisaremos para depois!

Criando o agendamento com o Agendador de Tarefas

Para encontrar o programa basta digitar na busca do menu iniciar Agendador de Tarefas. 

Para criar uma nova tarefa basta clicar no botão no lado direito: Criar Tarefa…

screenshot-marquesfernandes.com-2019.09.24-16_39_54.png

Criar tarefa – Aba Geral 

screenshot-marquesfernandes.com-2019.09.24-16_41_55.png

Na Aba Geral você vai preencher o nome do agendamento e sua descrição.

Dica: A descrição é opcional porém uma boa prática para que no futuro você ou outra pessoa consiga entender o que diabos esse agendamento faz. Experiência própria, crie uma descrição objetiva!

Nessa aba podemos definir também se queremos que o agendamento rode quando o usuário não estiver logado no computador, lembrando novamente que para funcionar o computador sempre precisa estar ligado. Vou assumir que você queira executar sempre mesmo com o computador bloqueado: Selecione Executar estando o usuário conectado ou não e digite seu usuário e senha para validar essa opção. 

Criar tarefa – Aba Disparadores 

Na Aba Disparadores configuramos os agendamentos da tarefa, clique no botão Novo para criar e configurar um novo agendamento. No exemplo abaixo estamos criando uma regra para rodar nosso agendamento todo dia às 16:43 hs:

screenshot-marquesfernandes.com-2019.09.24-16_44_36.png

Você pode criar mais de uma regra para cada agendamento.

Criar tarefa – Aba Ações 

Na Aba Ações vamos mapear quais ações deverão ser executadas. Para executar o script criado no começo do tutorial precisamos utilizar um programa nativo do Windows chamado CScript que permite executar nosso arquivo .vbs

No campo “Programa/script” adicione: “C:\Windows\System32\cscript.exe” 

Agora vamos passar como argumento para o CScript qual arquivo queremos que ele execute. Cole o caminho completo do arquivo .vbs que criamos no começo: 

No campo “Adicione argumentos (opcional)” troque os valores e adicione algo parecido com: “C:\Users\henrique\excelautomatico.vbs” 

Ambas configurações devem estar entre aspas. 

screenshot-marquesfernandes.com-2019.09.24-16_46_38.png

Criar tarefa – Outras Abas 

Algumas configurações adicionais podem ser encontradas nas outras abas, por isso recomendo que você de uma conferida e veja se alguma outra configuração será necessária para o seu caso. 

5 10 votos
Nota do Artigo
Author

Um nerd nada tradicional… Desenvolvedor web full-stack, escritor amador e inventor nas horas vagas. Apaixonado por tecnologia e entusiasmado por projetos de código aberto!

Subscribe
Notify of
guest
18 Comentários
newest
oldest most voted
Inline Feedbacks
View all comments
saco malhado
saco malhado
1 mês atrás

Henrique boa tarde, estou com um problema onde o caminho da macro é referenciado na personal.xlsb, e não consigo definir um path para ela e o excel não consegue encontrar as macros que lá dentro estão

Rafael Silva
Rafael Silva
4 meses atrás

É possível com este script abrir 2 arquivos excel ao mesmo tempo em segundo plano?

Edson Estrella de Almeida
Edson Estrella de Almeida
9 meses atrás

Prezado Henrique, muito obrigado pela ajuda, que há muito procurava.
O programa só não está rodando redondo porque não abre a planilha, embora o agendador de tarefas informe que está em execução.
Quando clico 2 vezes na macro a planilha é aberta mas apresenta mensagem de erro:Não é possível executar a macro, Código:800A03EC.
Talvez o problema esteja no Agendador.
Pode me ajudar?
Agradeço antecipadamente.
Edson Estrella

Rodrigo
Rodrigo
11 meses atrás

Gente, consegui rodar com esse código. Meu problema foi de compatibilidade de idiomas. Bastou alterar o “module1” por “módulo1”

Paula
Paula
Reply to  Rodrigo
11 meses atrás

Nossa, mesmo assim não funcionou comigo. =(
Ele consegue abrir o arquivo mas não consegue rodar a macro, trava nessa hora.

Paula
Paula
Reply to  Henrique Marques Fernandes
11 meses atrás

Henrique, obrigada por me responder!

Segue o código:

‘Caminho completo para a planilha excel 
CaminhoArquivoExcel = “C:\Users\paula.franca\Desktop\Scrip Teste\F-44 (Comp. FS) Beta 2.5.xlsm”
  
‘Escopo e nome completo da macro para executar 
CaminhoMacro = “módulo2.COMPFS”
 
‘Criamos uma instância do excel 
Set ExcelApp = CreateObject(“Excel.Application”) 
 
‘Você deseja que essa instância fique visível? 
ExcelApp.Visible = True 
 
‘Previne que o Excel mostre alertas
ExcelApp.DisplayAlerts = False
 
‘Abrimos o arquivo excel 
Set wb = ExcelApp.Workbooks.Open(CaminhoArquivoExcel)
 

Até abrir ele abre o arquivo direitinho mas quando chega no Run aparece o erro “Fim da instrução esperado”

‘Executamos a macro 
ExcelApp.Run CaminhoMacro

Rubens
Rubens
11 meses atrás

Tentei esse script e nao deu certo. O que pode estar errado??

CaminhoArquivoExcel = “\04. INDICADORES\5-Volumetria diária\Geral\Mini Gestao de demandas.xlsm”

CaminhoMacro = “atualizarBase”

Set ExcelApp = CreateObject(“Excel.Application”)

ExcelApp.Visible = True”

ExcelApp.DisplayAlerts = True

Set wb = ExcelApp.Workbooks.Open(\04. INDICADORES\5-Volumetria diária\Geral\Mini Gestao de demandas.xlsm)

ExcelApp.Run atualizarBase

wb.Save 

ExcelApp.DisplayAlerts = True

wb.Close 

ExcelApp.Quit 

MsgBox “Sua planilha foi executada automaticamente com sucesso às:” & TimeValue(Now), vbInformation 

Dionathan Barroso
Dionathan Barroso
11 meses atrás

Amigo, fiz exatamente o que foi pedido, estou usando este código com uma adaptação para atualizar planilhas “destinos” a partir de uma consulta de uma outra planilha “Origem”, o problema, é que algumas vez ele troca o formato da data de DD/MM/AAAA para MM/DD/AAAA, saberia me informar qual código eu adiciono neste script para que ele trabalhe somente no formato DD/MM/AAAA?

Marcos
Marcos
1 ano atrás

Amigo, post de sucesso!. Eu ainda não tentei, mas vou tentar e assim que o fizer, postarei aqui o resultado. Cara, uma pergunta: é possível eu com 42 anos de idade, entrar para o mundo da tecnologia? Digo, fazer sistemas de informação, aprender uma linguagem de programação, etc? Eu sou daqueles que aprendeu um pouco de DOS, word star, windows 95, mas depois não aprofundei. Acabei aprendendo coisas atuais “fuçando” vendo vídeos, etc. Sou louco desde a adolescência a programar. Mas sempre tive medo de iniciar e depois me frustar. Eu queria fazer programas, entender esse mundo por detrás de… Read more »

Eduardo
Eduardo
1 ano atrás

consigo fazer o mesmo processo para o access?

mateus
1 ano atrás

Ferá, não consegui rodar o script fora do agendador de tarefa ocorre um erro.
Alertbox: Erro de compilação do Microsfot vbscript

só funciona se rodar dentro do agendador de tarefa?

Joao Lucas
Joao Lucas
1 ano atrás

Boa tarde

Agradeço esta função.
Fiz como você ensinou, mas nada acontece.

Não sei o que estou a fazer de errado

Muito Obrigado

18
0
Would love your thoughts, please comment.x
()
x