Programar Abertura de Planilha Automaticamente
Como programar abertura de planilha automaticamente? Essa é uma pergunta constante nos sites de ajuda VBA.
Tanto que quando recebo e-mails sobre esse assunto até dou duas opções:
- Executar o excel automaticamente por código vba
- Abrir o excel automático pelo agendador do Windows
Neste artigo vamos ver a segunda opção, pois a primeira pode ser vista em outros sites e apesar de ser mais simples é necessário que o processo do Excel fique aberto.
Você irá perceber que para funcionar quase não precisa de código, mas como envolve uma quantidade de passos eu coloquei várias imagens!
É muita tecnologia?!
Então antes de continuar detalhando sobre o assunto, é de convir, mesmo nunca tendo feito este código, que a idéia é muito interessante…
Deixar o Excel tão automático que não é preciso nem abrir!!!
E podemos expandir ainda mais a partir do assunto principal:
- Abrir periodicamente: diário, semanal, mensal
- Repetidamente conforme minutos ou horas
- Ao inicializar o computador
- E etc
Programar abertura de planilha
Antes de descrever cada passo é necessário enxergarmos o processo como um todo:
Etapa 1 dentro do Excel – Código Principal
Então vamos começar pelo fim do processo ou seja, com o código principal. Para fins didáticos meu procedimento será apenas uma mensagem.
Então irei criar um módulo conforme imagem abaixo.
Aperte ALT + F11 em sua planilha e clique com botão direito em cima da Plan1 e selecione Inserir > Módulo
Dentro deste módulo (tela branca que irá aparecer) vou inserir minha funcionalidade principal:
Sub EXECUTAR_AUTOMATICO() 'MEU CÓDIGO PRINCIPAL MsgBox "Olá Bem vindos ao ExceleVBA.com.br" 'CÓDIGO PARA FECHAR PLANILHA APÓS EXECUTAR Application.DisplayAlerts = False Application.Quit End Sub
Importante: Perceba que nas linhas acima eu programei para o Excel fechar após realizar sua principal função. Isso é necessário para não ficar nenhum processo aberto do Excel.
Etapa 2 dentro do Excel – Código Secundário
Este procedimento irá executar assim que abrir a planilha e é responsável por chamar o procedimento principal.
Então vamos dar dois cliques onde diz EstaPasta_de_trabalho e inserir o código abaixo:
Private Sub Workbook_Open() Call EXECUTAR_AUTOMATICO End Sub
Percebam que EXECUTAR_AUTOMATICO é o nome do código principal feito na etapa 1.
Agora é necessário salvar a planilha, no meu caso vou chamar de Plan_Automatica.xls
Importante: Sempre que precisei eu usei a extensão .xls. Ao fazer testes com xlsm o agendador não abriu/executou a planilha.
Etapa 3 no Windows – Agendador de Tarefas
Usando o Windows 7, 8 ou 10 você pode apertar no teclado a tecla Windows e digitar “agendador de tarefas”.
Assim que você clicar no “Agendador de Tarefas” irá abrir uma tela como imagem abaixo:
No menu da direita selecione a opção “Criar tarefa…”
Na próxima tela que abrir preencha os dados conforme os campos marcados na imagem abaixo.
Em seguida selecione a guia “Disparadores” e clique em “Novo”. Nesta tela vamos marcar qual a frequência que nossa planilha automática irá abrir.
Então nesta imagem eu selecionei os campos necessários para repetir a execução da planilha uma vez a cada dia iniciando as 23h.
Agora na próxima guia “Ações” vamos indicar o que desejamos abrir. Então clique em “Novo” e demonstre onde a sua planilha está salva!
Observação: Se o seu Windows for 64 bits e o seu excel for 32 bits então no campo do endereço do programa adicione o seguinte código:
%systemroot%\Syswow64\cmd.exe /C “endereço da planilha”
Dúvida ver vídeo explicativo.
A guia seguinte é a “Condições” e esta podemos pular (mas é bom você dar uma olhada).
E a última guia é a “Configurações” e é interessante você olhar o último campo que pergunta o que fazer caso o processo do Excel ainda esteja aberto (lembra que na etapa 1 nós fechamos o Excel)
E com isto finalizamos os passos para programar abertura de planilha automaticamente.
Agora é só curtir e caso tenha dúvidas veja o vídeo!
Vídeo Explicativo
Valores de slicer com VBA
Olá pessoal!!
Após fazer meu primeiro artigo sobre segmentação de dados (slicer) fiquei com a idéia de fazer um segundo artigo.
No primeiro artigo mostrei como manipular totalmente um slicer e dando continuidade quero comentar como verificar valores de slicer com vba, afinal nada melhor para embelezar a planilha e encantar os olhos de todos.
Então sem mais delongas segue abaixo:
Verificar valor selecionado no slicer com vba
Sub valor_slicer() 'este é o codigo de um slicer qualquer com um valor de exemplo selecionado With ActiveWorkbook.SlicerCaches("SegmentaçãodeDados_PRODUTO") .SlicerItems("Celular").Selected = True .SlicerItems("Livros").Selected = False .SlicerItems("Tablets").Selected = False End With 'aqui então começa o verdadeiro codigo... 'crio um objeto com o slicer que quero operar Set seg = ActiveWorkbook.SlicerCaches("SegmentaçãodeDados_PRODUTO") 'utilizo de um for para varrer os itens e ver qual o selecionado 'caso encontre um ou mais entao pego seu valor For Each teste In seg.SlicerItems If teste.Selected Then MsgBox teste.Value End If Next End Sub
Selecionar valor no slicer conforme texto em célula qualquer
Agora que tal deixar sua planilha com design mais automático? mais intuitiva para o cliente?
Este código verifica em cada célula clicada se o valor é algum do slicer (segmentação de dados) e se for ele seleciona-o automaticamente.
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Set i = ActiveWorkbook.SlicerCaches("SegmentaçãodeDados_PRODUTO") If ActiveCell.Value = "TV" Then i.ClearManualFilter i.SlicerItems("Celular").Selected = False i.SlicerItems("Livros").Selected = False i.SlicerItems("Tablets").Selected = False i.SlicerItems("tv").Selected = True End If End Sub
Segue video completo para maior entendimento
Atualizar Tabela Dinâmica Automático 2
Anteriormente havia feito o post “Atualizar Tabela Dinâmica (Sem Botão)” e conforme sugestão do Marlon que viu o post anterior eu estou colocando mais essa maneira para atualizar tabela dinâmica automático.
Neste post coloco um código que verifica em cada alteração de célula se pertence a tabela de dados (e que por sua vez também faz parte da tabela dinâmica).
Caso faça parte dos dados que nos interessa, o código aguarda 3 segundos (mas pode ser o tempo que você quiser) e chama a atualização da tabela dinâmica.
PARTE 1
Primeiro código deve estar na Plan que seus dados que fazem parte da tabela dinâmica estão, no meu caso coloquei tanto os dados como a tabela dinâmica na Plan1.
Outro detalhe que deve ser observado na imagem acima é que o código será executado em cada mudança nas células da Plan1 (Worksheet change).
______________________________________________________________________________________
PARTE 1-2
Observem que a tabela de dados vai até a coluna 4 e até linha 9, por isso em cada mudança nas células é verificado se a alteração faz parte destas colunas e linhas
If Target.Column <= 4 And Target.Row <= 9 Then ... End If
Caso faça parte será chamado outra “sub Atualiza_TD” que atualiza a tabela dinâmica após 3 segundos
Application.OnTime Now + TimeSerial(0, 0, 3), "Atualiza_TD"
Poderia ser horas ou minutos ou outros segundos qualquer (0,0,3), eu coloquei 3 segundos
_________________________________________________________________________________
PARTE 2
No módulo fica a Sub que chamamos lá atrás na Plan1, o que ele faz é somente atualizar a tabela dinâmica.
No caso acima “Plan1” é onde está minha Tabela Dinâmica, e “TD_GENERO” é o nome da tabela dinâmica.
Caso tenha alguma dúvida de como colocar nome da Tabela Dinâmica ou outra dúvidas veja o vídeo abaixo.
__________________________________________________________________
Segue vídeo demonstrativo
Alterar Celula Automaticamente sem botão
Para alterar a celula automaticamente devemos inserir o codigo na plan1, não é em módulos
‘Este código altera o conteúdo da célula sem necessidade de ter um botão
‘Após inserir o número na célula A1 , irá exibir automaticamente na célula B1 o valor da célula A1 somando ele mesmo e dividindo por 2
Codigo para Alterar Celula Automaticamente
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Target.Offset(0, 1).Value = Target.Offset(0, 1).Value + Target.Value / 2 End If End Sub
Agora basta usar sua criatividade e usar este recurso do jeito que mais lhe agrada e assim deixar sua planilha mais intuitiva exemplo: como alterar uma tabela dinamica automaticamente
Segue vídeo de demonstração
Atualizar tabela dinâmica sem botão
De maneira simples demonstro como atualizar uma tabela dinâmica sem botão, automaticamente, e para funcionar:
- A Tabela de dados, conteúdo, deve estar na Plan1
- O código VBA abaixo e a tabela dinâmica deve estar no mesmo sheet (no caso abaixo no Plan2)
Desta maneira ao alterar os dados na Plan1 e ao clicar no Plan2 irá atualizar automaticamente a tab. dinamica (Plan2)
Codigo Atualizar Tabela Dinâmica sem botão
Private Sub Worksheet_Activate() 'Lembrando que este código deve estar no Plan2 'PivotTable1, é o nome da tabela dinâmica Sheets("Plan2").PivotTables("PivotTable1").RefreshTable End Sub
Video Demonstrativo
Fechar planilha automático
O código abaixo permite que você coloque o tempo que achar mais adequado para fechar planilha automático ao ficar inativa! você decide o tempo!
Para dados sigilosos é uma excelente idéia!
Bem, como nesse caso o código é segmentado achei melhor disponibilizar o código em imagens.
Define tempo para fechar
Adiciona o tempo que você acha ideal e faz a verificação ao abrir o arquivo
Incrementa tempo ao alterar dados
Verifica cada alteração dentro da planilha, adicionando maior tempo em cada uma alteração.
Fechar planilha automático
Nessa etapa se o tempo estiver expirado, será chamado a procedure de salvar e fechar a planilha.