Usuário com melhor resposta
Executar Macro na hora determinada

Pergunta
-
Bom dia Galera. Fiz uma macro para enviar um email automaticamente com alguns dados. Até aí funcionou. Agora preciso agendar um horario para gerar essa macro automaticamente. Eu fiz o codigo porem nao roda no horario. Acho que estou comendo mosca em algum paramento. Gostaria da ajuda dos Senhores. Segue o codigo completo.
Sub enviar_email()
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.DisplayAlerts = False
Dim picname As String
Dim grafico As Chart
Dim MyOlapp As Object, MeuItem As Object
Set MyOlapp = CreateObject("Outlook.Application")
Set MeuItem = MyOlapp.CreateItem(olMailItem)
ActiveWorkbook.RefreshAll
ActiveWorkbook.Sheets("plan1").ChartObjects(1).Activate
Set grafico = ActiveWorkbook.Sheets("plan1").ChartObjects(1).Chart
grafico.Export Filename:="C:\temp\Grafico1.jpg", filtername:="JPG"
Worksheets("plan2").Activate
ActiveWorkbook.Sheets("plan2").ChartObjects(1).Activate
Set grafico = ActiveWorkbook.Sheets("plan2").ChartObjects(1).Chart
grafico.Export Filename:="C:\temp\Grafico2.jpg", filtername:="JPG"
Worksheets("plan3").Activate
ActiveWorkbook.Sheets("plan3").ChartObjects(1).Activate
Set grafico = ActiveWorkbook.Sheets("plan3").ChartObjects(1).Chart
grafico.Export Filename:="C:\temp\Grafico3.jpg", filtername:="JPG"
Worksheets("plan4").Activate
ActiveWorkbook.Sheets("plan4").ChartObjects(1).Activate
Set grafico = ActiveWorkbook.Sheets("plan4").ChartObjects(1).Chart
grafico.Export Filename:="C:\temp\Grafico4.jpg", filtername:="JPG"
Set MyOlapp = CreateObject("Outlook.Application")
Set myItem = MyOlapp.CreateItem(olMailItem)
Set myAttachments = myItem.Attachments
Worksheets("dados").Activate
'Faturamento Cachaça
Range("c7").Select
texto1 = ActiveCell
'Faturamento por dia
Range("c9").Select
Texto2 = ActiveCell
'Faturamento por Mês
Range("c10").Select
Texto3 = ActiveCell
'Faturamento Orçado no Mês
Range("c11").Select
Texto4 = ActiveCell
'Vendas em Litros
Range("c12").Select
Texto5 = ActiveCell
With MeuItem
.BCC = ("index1")
.Subject = "Faturamento Cachaça"
.HTMLBody = " " & ActiveWorkbook.Sheets("DADOS").Range("C14").Value & "" & _
"<BR><BR>" & _
"<b>" & texto1 & "</b>" & "<br>" & "<br>" & _
Texto2 & "<br>" & _
Texto3 & "<br>" & _
Texto4 & "<br>" & _
Texto5 & "<br>" & _
"<BR><BR>" & _
"<img src='C:\temp\Grafico1.jpg'>" & _
"<BR><BR>" & _
"<img src='C:\temp\Grafico2.jpg'>" & _
"<BR><BR>" & _
"<img src='C:\temp\Grafico3.jpg'>" & _
"<BR><BR>" & _
"<img src='C:\temp\Grafico4.jpg'>" & _
"<BR><BR>" & _
"<i>" & "E-mail gerado automaticamente - Favor não responder." & "</i>"
.Display
.send
End With
ActiveWorkbook.Save
Application.ScreenUpdating = True
Application.EnableEvents = True
Application.DisplayAlerts = True
OnTime1
End Sub
Public Sub OnTime1()
Call Application.OnTime(TimeValue("12:00:00"), "enviar_email")
End Sub
Respostas
-
@acsatiro,
Muita gente não considera o método ontime seguro e faz agendamento de tarefas através de outros recursos.
Eu por exemplo, uso o agendador de tarefas do windows, que chama um arquivo .bat que aciona uma macro do access.
Existe um exemplo na galeria que detalha o assunto:
https://code.msdn.microsoft.com/How-to-schedule-VBA-Macros-f09ceca9
Com relação ao seu código, a única ressalva que tenho é que acredito que o ontime não precisa ser invocado pelo comando call... apenas application.ontime... já deve bastar;;
- Editado André Santo quarta-feira, 2 de setembro de 2015 15:52
- Sugerido como Resposta André Santo segunda-feira, 28 de setembro de 2015 19:53
- Marcado como Resposta Felipe Costa GualbertoMVP, Moderator quinta-feira, 5 de novembro de 2015 15:34