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
Bill Gates
para fazer um trabalho difícil… Porque ela encontrará uma forma fácil de fazê-lo.
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:
- 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.
- Troque o valor da variável CaminhoMacro para o valor exato da macro que você deseja rodar.
- 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.
- 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…
Criar tarefa – Aba Geral
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:
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.
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.
Boa Tarde
Como faço para usar este mesmo script
'Abrimos o arquivo excel
Set
wb = ExcelApp.Workbooks.Open(CaminhoArquivoExcel)
E colocar a senha já no código, pois é um arquivo com senha no excel ???
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
É possível com este script abrir 2 arquivos excel ao mesmo tempo em segundo plano?
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
Gente, consegui rodar com esse código. Meu problema foi de compatibilidade de idiomas. Bastou alterar o “module1” por “módulo1”
Nossa, mesmo assim não funcionou comigo. =(
Ele consegue abrir o arquivo mas não consegue rodar a macro, trava nessa hora.
Paula, tudo bem!? Consegue me passar mais informações? Da algum erro? Se sim, me passa e vamos tentar te ajudar a fazer funcionar!
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
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
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?
Fala Dionathan, normalmente isso ocorre por conta do idioma da planilha, precisaria padronizar isso!
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 »
Bom dia querido Marcos! Com certeza!!! Nunca é tarde para aprender e entrar para esse mercado. Hoje vivemos uma falta de mão de obra absurda, diversas empresas em busca de profissionais e poucos disponíveis, mesmo com salários bem acima da média de outras profissões, está muito difícil contratar. Posso te afirmar que é possível sim aprender e ingressar nesse mercado independente da idade, basta você focar e não desistir, no começo tudo parece um bicho de sete cabeças, mas com um pouco de paciência e quebrando a primeira barreira de conhecimento, você vai ver que programar/desenvolver na realidade é muito… Read more »
consigo fazer o mesmo processo para o access?
Fala Eduardo! Acredito que sim, provavelmente você precisará adaptar algumas coisas, mas a parte do agendador de tarefas é agnóstico, ele pode rodar qualquer coisa desde que configurado corretamente.
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?
Fala Mateus, desculpa a demora! Não, você deveria conseguir executar fora do ambiente do agendador sim! Provavelmente existe algum erro de sintaxe no seu código, da uma verificada com calma e ve se não está faltando alguma aspa, se todos os caminhos para as planilhas estão corretos…
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
Fala João, tudo bem?
Você pode dar uma olhada no “Visualizador de Eventos” do Windows, lá você consegue ter mais informações do o que aconteceu com o seu agendamento.