locked
Enviar email pelo excel

    Pergunta

  • Pessoal,

    tenho uma planilha com uma coluna chamada data e gostaria que qdo uma data desta coluna expirasse (ex.: data<data_atual) o excel me enviasse um email automaticamente. Tem como fazer isso?

     

    Desde ja, agradeço pela atenção de todos.

    Aline Alves

    terça-feira, 25 de março de 2008 19:07

Respostas

  • Vamos lá, Aline.

    Antes de mais nada, você precisa ir no Editor do VBA (ALT+F11) >> Ferramentas >> Referências e na lista de Referências Disponíveis, selecionar a opção Microsoft Outlook 1X.0 Object Library. (1X.0 pode ser 11.0 / 12.0, ou ouro dependendo da versão dos seus aplicativos) e em seguida Ok.

    Esta passagem é importante para permitir que o Excel manipule objetos do Outlook, única forma que conheço de acrescentar informações ao corpo do e-mail.

    Montei o código abaixo para realizar o que vc pediu.

    Ainda não estou satisfeito com a formatação final do corpo do e-mail, mas agora é ajuste fino.

    Como não sei a tua urgência envio esta versão parcial, enquanto dou os arremates finais na versão definitva.

    PS: Não esqueça de trocar o endereço de e-mail do código, ou vai encher a minha caixa de entrada de informações.

    [ ]s

     

    Code Snippet

    Sub Envio_Email()

    Set myOlApp = CreateObject("Outlook.Application")
    Set myItem = myOlApp.CreateItem(olMailItem)
    Set myAttachments = myItem.Attachments
    Set Planilha = Sheets(1)

    Conteúdo = "Cod" & vbTab & vbTab & "Data" & vbTab & vbTab & "Empresa" & vbTab & vbTab & "Produto" & vbLf

    N = Planilha.Cells(Planilha.Rows.Count, 2).End(xlUp).Row

    For i = 2 To N
        DataRef = CDate(Planilha.Cells(i, 2).Value)
        If DataRef < Date Then
        Conteúdo = Conteúdo & Trim(Planilha.Cells(i, 1)) & vbTab & vbTab
        Conteúdo = Conteúdo & Trim(Planilha.Cells(i, 2)) & vbTab & vbTab
        Conteúdo = Conteúdo & Trim(Planilha.Cells(i, 3)) & vbTab & vbTab
        Conteúdo = Conteúdo & Trim(Planilha.Cells(i, 4)) & vbLf
        End If
    Next i

    With myItem
        .To = "adilson.soledade@hotmail.com"
        .Subject = "Envio de mensagem de datas expiradas"
        .Body = Conteúdo
        .Save
    End With

    End Sub

     

     

     

     

    segunda-feira, 31 de março de 2008 17:26

Todas as Respostas

  • Boa tarde, Aline.

    Vc utiliza o Outlook para envio de e-mails?

    O teste e envio do e-mial poderia ser feito na abertura do arquivo?

    O procedimento abaixo atende às duas premissas. Na abertura do arquivo testa se uma data de referência é anterior à data do sistema e, em caso afirmativo, envia o arquivo via e-mail, colocando como título a mensagem "Arquivo expirado" combinado com o nome do arquivo, para o destinatário definido em Recipients

    Para que funcione é necessário inserir o código como evento da Pasta de Trabalho

     

    Code Snippet

    Private Sub Workbook_Open()
        Dim DataRef
        DataRef = Sheets(1).Cells(1, 1).Value
        If DataRef < Date Then
        ActiveWorkbook.SendMail _
        Recipients:="responsavel@email.com.br", _
        Subject:="Arquivo expirado " & ThisWorkbook.Name
        End If
    End Sub

     

     

    [ ]s

    terça-feira, 25 de março de 2008 20:59
  • Olá, Adilson.

     

    Bem, tá quase lá. O código tá executando, mas ele não tá abrindo o Microsft Outlook (programa de email que utilizo). Ao invés disso, o excel mostra uma tela informando que um programa de email está sendo aberto e se eu permito isso ou não. Clico em SIM, mas nada acontece. Vc sabe o que há de errado? Tenho outras dúvidas tb:

     

    1) se eu quiser determinar uma range para ser verificada, ou seja, na coluna A eu tenho as datas e quero que ele verifique em toda aquela coluna quem já expirou e quem não, então, como eu escrevo a range (a2:a25000, por exemplo)? Sheets(1).range.value

     

    2) se eu quiser determinar o conteúdo da mensagem, o corpo do email, tem como?!

     

    3) na verdade eu preciso de uma rotina que me diga qdo essas datas estão expiradas ou não e eu só vou saber cado eu abra tal arquivo, certo? será que existe alguma coisa no Windows XP que faça isso automaticamente?

     

    Mais uma vez, mto obgda pela sua ajuda.

     

    Aline Alves

     

    quarta-feira, 26 de março de 2008 18:34
  •  Aline Alves wrote:

    Olá, Adilson.

     

    Bem, tá quase lá. O código tá executando, mas ele não tá abrindo o Microsft Outlook (programa de email que utilizo). Ao invés disso, o excel mostra uma tela informando que um programa de email está sendo aberto e se eu permito isso ou não. Clico em SIM, mas nada acontece. Vc sabe o que há de errado? Tenho outras dúvidas tb:

     

    1) se eu quiser determinar uma range para ser verificada, ou seja, na coluna A eu tenho as datas e quero que ele verifique em toda aquela coluna quem já expirou e quem não, então, como eu escrevo a range (a2:a25000, por exemplo)? Sheets(1).range.value

     

    2) se eu quiser determinar o conteúdo da mensagem, o corpo do email, tem como?!

     

    3) na verdade eu preciso de uma rotina que me diga qdo essas datas estão expiradas ou não e eu só vou saber cado eu abra tal arquivo, certo? será que existe alguma coisa no Windows XP que faça isso automaticamente?

     

    Mais uma vez, mto obgda pela sua ajuda.

     

    Aline Alves

     

     

    Aline,

    No meu computador aparece a mesma mensagem, porém o e-mail é enviado. Vc alterou o endereço de e-mail que coloquei e substitui-o por um válido? Se a resposta for afirmativa, verifique se o item consta na pasta de e-mails enviadas.

     

    Agora estou com umaa dúvidas:

    Vc quer o e-mail seja enviado se houver uma data expirada ou várias?

    Qual a condição a ser imposta?

    O usuário deverá receber uma lista com os itens cujas datas foram expiradas, ou para cada data expirada deve ser enviado um e-mail?

     

    Quanto a outra solução, vc poderia usar a própria agenda do outlook para cadastrar compromissos com datas de expiração e envio de aviso para os usuários.

     

    Vou pesquisar a questão do corpo do e-mail, mas a resposta anterior já fornece boas informações sobre o tema.

    A propósito, qual a versão do Excel que vc está utilizando?

     

    [ ]s

     

    quarta-feira, 26 de março de 2008 20:11
  • É verdade, a msg aparece, mas o email é mandado.

     

    Bem, vamos responder às suas perguntas.

     

    "Vc quer o e-mail seja enviado se houver uma data expirada ou várias?" Várias.  Na verdade é uma coluna com datas em cada linha. O Excel olhará em cada linha e achado qq data expirada ele deverá enviar um email com todas essas datas expiradas e suas respectivas colunas.

     

    "Qual a condição a ser imposta?" O critério de expiração é para datas menores que a data atual:

     

    "O usuário deverá receber uma lista com os itens cujas datas foram expiradas, ou para cada data expirada deve ser enviado um e-mail?" Receber uma lista, em um úinico email, com as informações daquela data expirada. por isso o interesse em saber como escrever no corpo do email.

     

    Exemplo:

    Cod          Data                Empresa                 Produto

    1               21/03/08           XYZ                        Mesa

    2               22/03/08          Beta Soluções         Cadeira

    3               05/04/08          Apinfy                      Sapato

     

    O sistema deverá enviar um único email com a seguinte informação:

    Assunto do email: Datas expiradas

    Corpo do email: Cod          Data                Empresa                 Produto

                               1               21/03/08           XYZ                        Mesa

                               2               22/03/08          Beta Soluções         Cadeira

     

    Adilson, mto obga mesmo pela sua atenção.

     

    Aline Alves

     

     

    segunda-feira, 31 de março de 2008 15:03
  • Vamos lá, Aline.

    Antes de mais nada, você precisa ir no Editor do VBA (ALT+F11) >> Ferramentas >> Referências e na lista de Referências Disponíveis, selecionar a opção Microsoft Outlook 1X.0 Object Library. (1X.0 pode ser 11.0 / 12.0, ou ouro dependendo da versão dos seus aplicativos) e em seguida Ok.

    Esta passagem é importante para permitir que o Excel manipule objetos do Outlook, única forma que conheço de acrescentar informações ao corpo do e-mail.

    Montei o código abaixo para realizar o que vc pediu.

    Ainda não estou satisfeito com a formatação final do corpo do e-mail, mas agora é ajuste fino.

    Como não sei a tua urgência envio esta versão parcial, enquanto dou os arremates finais na versão definitva.

    PS: Não esqueça de trocar o endereço de e-mail do código, ou vai encher a minha caixa de entrada de informações.

    [ ]s

     

    Code Snippet

    Sub Envio_Email()

    Set myOlApp = CreateObject("Outlook.Application")
    Set myItem = myOlApp.CreateItem(olMailItem)
    Set myAttachments = myItem.Attachments
    Set Planilha = Sheets(1)

    Conteúdo = "Cod" & vbTab & vbTab & "Data" & vbTab & vbTab & "Empresa" & vbTab & vbTab & "Produto" & vbLf

    N = Planilha.Cells(Planilha.Rows.Count, 2).End(xlUp).Row

    For i = 2 To N
        DataRef = CDate(Planilha.Cells(i, 2).Value)
        If DataRef < Date Then
        Conteúdo = Conteúdo & Trim(Planilha.Cells(i, 1)) & vbTab & vbTab
        Conteúdo = Conteúdo & Trim(Planilha.Cells(i, 2)) & vbTab & vbTab
        Conteúdo = Conteúdo & Trim(Planilha.Cells(i, 3)) & vbTab & vbTab
        Conteúdo = Conteúdo & Trim(Planilha.Cells(i, 4)) & vbLf
        End If
    Next i

    With myItem
        .To = "adilson.soledade@hotmail.com"
        .Subject = "Envio de mensagem de datas expiradas"
        .Body = Conteúdo
        .Save
    End With

    End Sub

     

     

     

     

    segunda-feira, 31 de março de 2008 17:26
  •  Adilson Soledade wrote:

    Vamos lá, Aline.

    Antes de mais nada, você precisa ir no Editor do VBA (ALT+F11) >> Ferramentas >> Referências e na lista de Referências Disponíveis, selecionar a opção Microsoft Outlook 1X.0 Object Library. (1X.0 pode ser 11.0 / 12.0, ou ouro dependendo da versão dos seus aplicativos) e em seguida Ok.

    Esta passagem é importante para permitir que o Excel manipule objetos do Outlook, única forma que conheço de acrescentar informações ao corpo do e-mail.

    Montei o código abaixo para realizar o que vc pediu.

    Ainda não estou satisfeito com a formatação final do corpo do e-mail, mas agora é ajuste fino.

    Como não sei a tua urgência envio esta versão parcial, enquanto dou os arremates finais na versão definitva.

    PS: Não esqueça de trocar o endereço de e-mail do código, ou vai encher a minha caixa de entrada de informações.

    [ ]s

     

    Code Snippet

    Sub Envio_Email()

    Set myOlApp = CreateObject("Outlook.Application")
    Set myItem = myOlApp.CreateItem(olMailItem)
    Set myAttachments = myItem.Attachments
    Set Planilha = Sheets(1)

    Conteúdo = "Cod" & vbTab & vbTab & "Data" & vbTab & vbTab & "Empresa" & vbTab & vbTab & "Produto" & vbLf

    N = Planilha.Cells(Planilha.Rows.Count, 2).End(xlUp).Row

    For i = 2 To N
        DataRef = CDate(Planilha.Cells(i, 2).Value)
        If DataRef < Date Then
        Conteúdo = Conteúdo & Trim(Planilha.Cells(i, 1)) & vbTab & vbTab
        Conteúdo = Conteúdo & Trim(Planilha.Cells(i, 2)) & vbTab & vbTab
        Conteúdo = Conteúdo & Trim(Planilha.Cells(i, 3)) & vbTab & vbTab
        Conteúdo = Conteúdo & Trim(Planilha.Cells(i, 4)) & vbLf
        End If
    Next i

    With myItem
        .To = "adilson.soledade@hotmail.com"
        .Subject = "Envio de mensagem de datas expiradas"
        .Body = Conteúdo
        .Save
    End With

    End Sub

     

     

     

     

     

     

     

     

    mas como faço para enviar o email se o programa de email que está sendo utilizado nao for o outlook express?

    sexta-feira, 18 de abril de 2008 14:39
  • Boa tarde pessoal!

    Estou utilizando a seguinte VBA para enviar emails com um determiado Range utilizando o Excel.
    Ocorre que eu gostaria que esse envio fosse automático, ou seja, eu fixaria 02 datas no mês para ser enviado o email.

    Code Snippet

    Sub Enviar_email()

       ' Select the range of cells on the active worksheet.

       ActiveSheet.Range("A3:C130").Select


       ' Show the envelope on the ActiveWorkbook.

       ActiveWorkbook.EnvelopeVisible = True


       ' Set the optional introduction field thats adds

       ' some header text to the email body. It also sets

       ' the To and Subject lines. Finally the message

       ' is sent.

      With ActiveSheet.MailEnvelope

          .Introduction = "Próximo pagamento:"

          .Item.To = "fulano@email.com"

          .Item.Subject = "Pagamento"

          .Item.Send

       End With

    End Sub


    Teria como fazer isso?

    Obrigado a todos de antemão.



    Rodrigo A. de Brito Bastos

    rodrigoabb@gmail.com




    quarta-feira, 17 de dezembro de 2008 18:45
  • adilsonsoledade
    Aline



    voces conseguiram fazer o arquivo funcionar?
    estou precisando montar essa formula, estou tentando usar as dicas acima, mas nao to conseguindo, nao conhecia VBA, nao sei como inserir a formula, fiquei com duvida se tenho que indicar a posição das celulas onde serao consideradas as datas,
    poderim por favor me enviar a planilha com a formula em uso para eu ver como foi inserido?

    meu email eh - ernandesgpjr@gmail.com

    agradeço a atenção

    obrigado.

    Ernandes Jr.
    domingo, 31 de maio de 2009 20:54