Planilha de Agenda Excel VBA que Fala
Neste artigo você vai aprender como agendar tarefas no Excel com VBA e também ver uma planilha de agenda que fala.
Verá várias técnicas interessantes que podem ser aplicadas nos seus projetos e também pode fazer o download gratuito da planilha deste artigo.
Como Agendar Horários de Execução no Excel com VBA
Neste artigo nós iremos demonstrar como criar agendamentos no Excel utilizando Application.OnTime do VBA no Excel.
É um exemplo prático no qual iremos fazer com que o Excel nos avise 30 minutos antes todas as tarefas que estão agendadas e também as em atraso.
A estrutura da nossa agenda possui as seguintes colunas:
- Data: Data da tarefa
- Horário: Horário em que deve ser realizada a tarefa
- Tarefa: A descrição da tarefa, o Excel irá ler este conteúdo
- Conclusão: Data e horário da conclusão. Iremos fazer um VBA que irá preencher a data de conclusão ao realizarmos um duplo clique neste campo.
- Controle: Coluna de controle com uma fórmula que indica se a tarefa deve ou não ser lida. Se está ou não dentro do horário do aviso.
Código VBA para Preencher a Data e Horário de Conclusão
Na planilha de agenda incluímos um processo que ao dar um duplo na célula da coluna Conclusão o sistema irá preencher com a data e horário em que foi realizada a tarefa.
Para isso usamos o seguinte código VBA:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) If Cells(Target.Row, 5).Value <> "" Then Target.Value = "" Else Target.Value = Now() End If Cancel = True End Sub
Este procedimento acima foi incluso na planilha Agenda no VBE.
Lendo o código temos que se a coluna 5 da linha em que houve o click estiver vazia, o Excel irá então colocar a data e hora atual (Now() do VBA Excel), senão irá preencher com vazio.
Código VBA Excel para Fazer a Planilha Falar em Português
O Excel evoluiu bastante e agora já fala em Português inclusive.
Nós fizemos um código no VBA Excel para ler o conteúdo das células e também avisar a quantidade de tarefas em atraso.
Para isso usamos o seguinte código:
Public Sub lsExecutaAtualizacao() Dim lUltimaLinhaAtiva As Long Calculate If Calculos.Range("Controle").Value > 0 Then lUltimaLinhaAtiva = Agenda.Cells(Agenda.Rows.Count, 2).End(xlUp).Row 'Alarme Application.Speech.Speak Text:="Você tem " & Calculos.Range("Controle").Value & IIf(Calculos.Range("Controle").Value > 1, " eventos", "evento") For i = 9 To lUltimaLinhaAtiva If Agenda.Cells(i, 6).Value > 0 Then Application.Speech.Speak Text:=Range("D" & i).Value End If Next i End If End Sub
No vídeo que está no começo do artigo nós explicamos detalhadamente como funciona detalhadamente, criando do zero a aplicação.
Mas explicando rapidamente, o código acima faz o seguinte:
- Atualiza as fórmulas da planilha (Calculate)
- Verificar se há tarefas pendentes (If Calculos.Range(“Controle”).Value > 0 Then)
- Então se houver registros o sistema verifica qual a última linha da agenda (lUltimaLinhaAtiva = Agenda.Cells(Agenda.Rows.Count, 2).End(xlUp).Row)
- Em seguida o Excel então fala a quantidade de eventos pendentes (Application.Speech.Speak Text:=”Você tem ” & Calculos.Range(“Controle”).Value & IIf(Calculos.Range(“Controle”).Value > 1, ” eventos”, “evento”)).
- Por fim é feito então um loop pelas células e identificado apenas aqueles que tem número maior que 0 no controle e se tiver é lido o conteúdo da célula. (Application.Speech.Speak Text:=Range(“D” & i).Value)
Veja que para ler o conteúdo das células é utilizado um evento muito simples: Application.Speech.Speak Text:=”Aqui o seu texto”
Com este código o Excel pode ler qualquer texto e legal que é em Português ou a linguagem que estiver configurada na sua aplicação.
Código para Agendar Tarefas no Excel com VBA
Além disso temos então que fazer com que o Excel execute de tempos em tempos o procedimento lsExecutaAtualizacao.
Por exemplo, podemos agendar para que rode a cada 2 minutos e veja se há tarefas pendentes.
Para isso utilizamos o seguinte código fonte:
Public Sub lsSchedule( Dim lHoras As Integer Dim lMinutos As Integer Dim lSegundos As Integer lHoras = 0 lMinutos = 2 lSegundos = 0 NameOfThisProcedure = "lsSchedule" NameOfScheduleProc = "lsExecutaAtualizacao" 'Hora atual mais dois minutos lProximo = Time + TimeSerial(lHoras, lMinutos, lSegundos) Application.OnTime EarliestTime:=lProximo, Procedure:=NameOfThisProcedure 'Executa novo agendamento Application.Run NameOfScheduleProc End Sub
Entendendo o código VBA para agendamento Excel:
- Na primeira parte temos então variáveis aonde temos a quantidade de horas, minutos e segundos a cada quanto tempo será executado o agendamento. No caso acima 2 minutos.
- Então nos campos NameOfThisProcedure e NameOfScheduleProc temos no primeiro o nome desta procedure, pois ela será então executada novamente e precisamos do nome e no segundo a tarefa que será executada no caso lsExecutarAtualizacao.
- Em seguida temos na variável lProximo que recebe o horário ao qual será agendada a tarefa
- E por fim o agendamento em Application.OnTime EarliestTime:=lProximo, Procedure:=NameOfThisProcedure. Neste código nós iremos então chamar o evento no horário definido.
- E em seguida realizamos um novo agendamento para a próxima rodada, ficando assim recorrente. Application.Run NameOfScheduleProc
Cálculos da Planilha
Todos os cálculos que são utilizados na planilha, assim como os seus parâmetros estão definidos na planilha cálculos.
Nela temos quando devem ser avisadas as tarefas, no caso 30 minutos antes, e também os cálculos de quantidade de controles e horários do Excel.
Download da planilha de Exemplo
Para realizar o download da planilha basta se cadastrar gratuitamente na nossa newsletter e receber novidades do Guia do Excel.
Baixe a planilhaCurso Excel Completo – Do Básico ao VBA
Quer aprender Excel do Básico, passando pela Avançado e chegando no VBA? Clique na imagem abaixo: