none
Executar Macro na hora determinada RRS feed

  • 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

    quarta-feira, 2 de setembro de 2015 15:01

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;;



    quarta-feira, 2 de setembro de 2015 15:50