none
Enviar email automatico Excel RRS feed

  • Pergunta

  • Estou com um problema em desenvolver uma macro, também não sei se é possivel atender a minha necessidade, pois bem:

     

    tenho uma planilha onde consta:

    Data atual 20/09/2011

    Documento | Emissão | Renovação | Dias Validade |  Dias Para Renovação | Depto

    Equip. 1      |15/12/10 |15/12/11    | 365                 | 86                               |email@

     

    gostaria de saber se é possivel enviar um email automatico para o "depto" quando os dias para renovação chegarem a 20 dias com as informações da celula.

     

    Grato

     

    terça-feira, 20 de setembro de 2011 14:35

Respostas

  • de uma olhada nesse arquivo

    que ele faz mais ou menos o que vc está querendo

     

    Att

     

    http://www.4shared.com/document/DIZVLFzT/EnviarEmail1.html

    Jonatan,

    o Código que você escreveu na planilha ficou muito bom.

    Ela é quase o que preciso, e por isso eu queria aproveitar o seu conhecimento.

    Veja só: ao invés de enviar o e-mail ao completar 20 dias, eu preciso que seja enviado um e-mail toda vez que a célula tiver sua informação alterada.

    Por exemplo: vamos alterar o nome da Coluna "Renovação (dias restantes)" para "Status". Nela vamos colocar os status "À vencer" e "Vencido".

    Sempre que a Célula tiver seu valor alterado para "À vencer", "Vencido" ou para qualquer outro valor, eu preciso que um e-mail seja disparado, da mesma forma que é disparado na Macro da planilha que você criou.

    Você consegue me ajudar?

    Agradeço sua ajuda e a de todos que contribuírem.

    Grande abraço.

    Fernando

    Amigos,

    consegui encontrar uma solução para o problema que apresentei.

    Créditos para Ivair Claudio Ferrari (http://social.msdn.microsoft.com/profile/ivairferrari) do site www.excelmax.com.br, que respondeu meu tópico "Macro para enviar conteúdo de Célula do Excel por e-mail" disponível em http://social.msdn.microsoft.com/Forums/pt/vbapt/thread/3ba20940-54fc-4cac-897b-6b7bb29e3f4f

    Vejam a solução que ele me apresentou:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim OutApp As Object
        Dim OutMail As Object
        Dim texto As String

        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)

        linha = ActiveCell.Row - 1
        If Target.Address = "$F$" & linha Then

            If Plan1.Cells(linha, 6) = "Concluído" Then
                texto = Plan1.Cells(linha, 1) & "  -  " & Plan1.Cells(linha, 2) & "  -  " _
                        & Plan1.Cells(linha, 3) & "  -  " & Plan1.Cells(linha, 4) & "  -  " _
                        & Plan1.Cells(linha, 5) & "  -  " & Plan1.Cells(linha, 6)
            End If

            With OutMail
                .To = Plan1.Cells(linha, 1)
                .cc = ""
                .BCC = ""
                .Subject = "Título do email"
                .HTMLBody = texto
                .Display   'Utilize Send para enviar o email sem abrir o Outlook
            End With
            On Error GoTo 0

            Set OutMail = Nothing
            Set OutApp = Nothing
        End If
    End Sub

    Tenho certeza que a Colaboração dele ajudará muita gente.

    Grande abraço.

    Fernando

    domingo, 29 de julho de 2012 04:00

Todas as Respostas

  • Veja se este código lhe ajuda...

            '*/ ============================================================================
            '*/ Cria o objeto de email para ser enviado com o arquivo correspondente anexado
            '*/ ============================================================================
            Sub CriaEmail(Destinatario As String, cCopia As String, NomeDoArquivo As String)
                Dim objOutlook As Object
                Dim objMail As Object
                Dim myAnexos
                Dim myDestinatario
                Dim myCopia
                
                'Cria um novo item de email e altera suas propriedades
                Set objOutlook = CreateObject("Outlook.Application")
                
                'Cria uma nova instancia de item de email
                Set objMail = objOutlook.Application.CreateItem(olMailItem)
                Set myAnexos = objMail.Attachments
                Set myDestinatario = objMail.Recipients
                
            
                With objMail
                    'Define o corpo do email em HTML
                        .BodyFormat = olFormatHTML
                        .Importance = 2
                   ' Cria as tag com as informações no corpo da mensagem
                        .HTMLBody = "<HTML>" & _
                            "<BODY><p>Prezados (as),</p>" & _
                            "<p>Para complementação da atualização do banco de dados de " & _
    						"considerando todos os campos.</p>" & _
                            ".</BODY></HTML>"
                    ' Define o Destinatário da Mensagem nos campos Para
                        myDestinatario.Add (Destinatario)
                        myCopia = "fulano@dominio.com.br"
                        myCopia = myCopia & cCopia
                        .CC = myCopia
                        .BCC = "cicrano@dominio.com.br"
                    ' Anexa o respectivo Extrato
                        myAnexos.Add NomeDoArquivo
                    ' Cria o Título do Email
                        .Subject = "Validação Bco Dados"
                        .Display ' Exibe a mensagem na Tela
                        SendKeys "%mm"
                        .Send
                End With
            End Sub
    

    []'s


    David Brigido
    terça-feira, 20 de setembro de 2011 18:29
  • David,

    muito obrigado, bem na realidade eu nao entendo muito de VBA para excel, tenho pequena noção do que se trata.

    encontrei um art. que é parecido com o que eu quero, a função seria a mesma de enviar as informações das celulas onde consta 20 dias para renovação na celula E1.

     

    abs

    ----------------------------------------------------------------------------------------------------------

    "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

    -----------------------------------------------------------------------------------------------------

    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

    quarta-feira, 21 de setembro de 2011 11:08
  • David,

    com o seu codigo é possivel fazer o seguinte:

    Quando os dias de renovação chegar a 20, enviar o email para o "departamento"  com as informações contidas nas celulas ?

    Grato,

     

    Documento Emissão         (data) Renovação       (data) Validade          (dias) Renovação              (dias restantes) Departamento
    Equip 1 13/1/2011 13/1/2012 365 112 teste@teste.com
    Equip 2 28/10/2010 28/10/2011 365 35 contato@teste.com
    sexta-feira, 23 de setembro de 2011 14:13
  • de uma olhada nesse arquivo

    que ele faz mais ou menos o que vc está querendo

     

    Att

     

    http://www.4shared.com/document/DIZVLFzT/EnviarEmail1.html

    quarta-feira, 28 de setembro de 2011 21:58
  • Muito bom!

    Pessoal tenho uma duvida acredito que similar.

    Caso possam ajudar, gostaria de enviar um email a algumas pessoas caso o valor obtido seja superior ao limite estipulado em 3 vezes consecutivas (ex 8,5 para pH). Criei até uma logica para formataçao condicional mas infelizmente desconheço a ferramenta de VBA.

    Local de Coleta Data pH  
     
     
    REPOSIÇÃO TORRE 3 22/08/2011 8,05  
    REPOSIÇÃO TORRE 3 29/09/2011 9  
    REPOSIÇÃO TORRE 3 04/10/2011 9 E(I5>$I$14;I6>$I$14;I7>$I$14)
    REPOSIÇÃO TORRE 3 13/10/2011 9 VERDADEIRO
    REPOSIÇÃO TORRE 3 17/11/2011 6,9 FALSO
    REPOSIÇÃO TORRE 3 28/11/2011 7,8 FALSO
    REPOSIÇÃO TORRE 3 07/12/2011 8 FALSO
    REPOSIÇÃO TORRE 3 22/12/2011 6,97 FALSO
        Limite  
        8,5  

    Atenciosamente,

    Rafael

     
    • Sugerido como Resposta rafaellino2 quarta-feira, 14 de março de 2012 23:29
    quarta-feira, 14 de março de 2012 23:07
  • de uma olhada nesse arquivo

    que ele faz mais ou menos o que vc está querendo

     

    Att

     

    http://www.4shared.com/document/DIZVLFzT/EnviarEmail1.html

    Jonatan,

    o Código que você escreveu na planilha ficou muito bom.

    Ela é quase o que preciso, e por isso eu queria aproveitar o seu conhecimento.

    Veja só: ao invés de enviar o e-mail ao completar 20 dias, eu preciso que seja enviado um e-mail toda vez que a célula tiver sua informação alterada.

    Por exemplo: vamos alterar o nome da Coluna "Renovação (dias restantes)" para "Status". Nela vamos colocar os status "À vencer" e "Vencido".

    Sempre que a Célula tiver seu valor alterado para "À vencer", "Vencido" ou para qualquer outro valor, eu preciso que um e-mail seja disparado, da mesma forma que é disparado na Macro da planilha que você criou.

    Você consegue me ajudar?

    Agradeço sua ajuda e a de todos que contribuírem.

    Grande abraço.

    Fernando

    • Sugerido como Resposta Nando_Rodrigues domingo, 29 de julho de 2012 03:52
    • Não Sugerido como Resposta Nando_Rodrigues domingo, 29 de julho de 2012 03:52
    domingo, 29 de julho de 2012 01:01
  • de uma olhada nesse arquivo

    que ele faz mais ou menos o que vc está querendo

     

    Att

     

    http://www.4shared.com/document/DIZVLFzT/EnviarEmail1.html

    Jonatan,

    o Código que você escreveu na planilha ficou muito bom.

    Ela é quase o que preciso, e por isso eu queria aproveitar o seu conhecimento.

    Veja só: ao invés de enviar o e-mail ao completar 20 dias, eu preciso que seja enviado um e-mail toda vez que a célula tiver sua informação alterada.

    Por exemplo: vamos alterar o nome da Coluna "Renovação (dias restantes)" para "Status". Nela vamos colocar os status "À vencer" e "Vencido".

    Sempre que a Célula tiver seu valor alterado para "À vencer", "Vencido" ou para qualquer outro valor, eu preciso que um e-mail seja disparado, da mesma forma que é disparado na Macro da planilha que você criou.

    Você consegue me ajudar?

    Agradeço sua ajuda e a de todos que contribuírem.

    Grande abraço.

    Fernando

    Amigos,

    consegui encontrar uma solução para o problema que apresentei.

    Créditos para Ivair Claudio Ferrari (http://social.msdn.microsoft.com/profile/ivairferrari) do site www.excelmax.com.br, que respondeu meu tópico "Macro para enviar conteúdo de Célula do Excel por e-mail" disponível em http://social.msdn.microsoft.com/Forums/pt/vbapt/thread/3ba20940-54fc-4cac-897b-6b7bb29e3f4f

    Vejam a solução que ele me apresentou:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim OutApp As Object
        Dim OutMail As Object
        Dim texto As String

        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)

        linha = ActiveCell.Row - 1
        If Target.Address = "$F$" & linha Then

            If Plan1.Cells(linha, 6) = "Concluído" Then
                texto = Plan1.Cells(linha, 1) & "  -  " & Plan1.Cells(linha, 2) & "  -  " _
                        & Plan1.Cells(linha, 3) & "  -  " & Plan1.Cells(linha, 4) & "  -  " _
                        & Plan1.Cells(linha, 5) & "  -  " & Plan1.Cells(linha, 6)
            End If

            With OutMail
                .To = Plan1.Cells(linha, 1)
                .cc = ""
                .BCC = ""
                .Subject = "Título do email"
                .HTMLBody = texto
                .Display   'Utilize Send para enviar o email sem abrir o Outlook
            End With
            On Error GoTo 0

            Set OutMail = Nothing
            Set OutApp = Nothing
        End If
    End Sub

    Tenho certeza que a Colaboração dele ajudará muita gente.

    Grande abraço.

    Fernando

    domingo, 29 de julho de 2012 04:00
  • quinta-feira, 6 de setembro de 2012 00:46
  • Olá professor Ivair e pessoal,

    Venho seguindo a solução apresentada, porém algo está acontecendo e não está funcionando corretamente.

    Gostaria de condicionar a palavra atrasado, que surge a partir de uma fórmula SE

    (=SE(I16="";"";SE(I16<AGORA();"Atrasado";""))) dentro da tabela.

    Porém, não vem o e-mail automaticamente, e se eu digito a palavra "Atrasado", o e-mail vem em branco.

    Será que conseguem identificar o que foi?

    Segue otexto da macro e um print da planilha.

    MACRO:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim OutApp As Object
        Dim OutMail As Object
        Dim texto As String

        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)

        linha = ActiveCell.Row - 1
        If Target.Address = "$H$" & linha Then

            If Plan2.Cells(linha, 7) = "Atrasado" Then
                  texto = "Nome: " & Plan2.Cells(linha, 4) & _
                        "Funcionario:" & Plan2.Cells(linha, 1) & _
                        "Setor:" & Plan2.Cells(linha, 2) & _
                        "Previsao de Entrega: " & Plan2.Cells(linha, 8)
            End If

            With OutMail
                .To = "brunoveras@aridesa.com.br"
                .cc = "edivarmarinho@aridesa.com.br"
                .BCC = ""
                .Subject = "Projeto Atrasado!"
                .HTMLBody = texto
                .Send
            End With
            On Error GoTo 0

            Set OutMail = Nothing
            Set OutApp = Nothing
        End If
    End Sub

    quarta-feira, 9 de janeiro de 2013 12:35
  • Olá amigo Edivar Marinho!

    Acredito que sua função esteja dando um certo conflito pois, nela você manda verificar a "Data e Hora atual" com uma célula que deva conter o mesmo tipo de informação (Data e Hora).

    Se quiser e puder enviar um e-mail com um exemplo, citando que se trata de uma dúvida postada aqui no fórum, posso verificar com mais propriedade e respondo aqui para lhe ajudar.

    E-mail: ivairferrari@gmail.com

    http://excelmax.blogspot.com.br


    Certificado: Microsoft Office Excel 2007 Specialist; CEO ExcelMax® Soluções (#excel), Consultoria e Desenvolvimento de Soluções/Softwares baseados em Excel/VBA. Brazil · http://www.excelmax.com.br

    sexta-feira, 1 de fevereiro de 2013 13:14
  • Olá professor Ivair e pessoal,

    Venho seguindo a solução apresentada, porém algo está acontecendo e não está funcionando corretamente.

    Gostaria de condicionar a palavra atrasado, que surge a partir de uma fórmula SE

    (=SE(I16="";"";SE(I16<AGORA();"Atrasado";""))) dentro da tabela.

    Porém, não vem o e-mail automaticamente, e se eu digito a palavra "Atrasado", o e-mail vem em branco.

    Será que conseguem identificar o que foi?

    Segue otexto da macro e um print da planilha.

    MACRO:

    Private Sub Worksheet_Change(ByVal Target As Range)
        Dim OutApp As Object
        Dim OutMail As Object
        Dim texto As String

        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)

        linha = ActiveCell.Row - 1
        If Target.Address = "$H$" & linha Then

            If Plan2.Cells(linha, 7) = "Atrasado" Then
                  texto = "Nome: " & Plan2.Cells(linha, 4) & _
                        "Funcionario:" & Plan2.Cells(linha, 1) & _
                        "Setor:" & Plan2.Cells(linha, 2) & _
                        "Previsao de Entrega: " & Plan2.Cells(linha, 8)
            End If

            With OutMail
                .To = "brunoveras@aridesa.com.br"
                .cc = "edivarmarinho@aridesa.com.br"
                .BCC = ""
                .Subject = "Projeto Atrasado!"
                .HTMLBody = texto
                .Send
            End With
            On Error GoTo 0

            Set OutMail = Nothing
            Set OutApp = Nothing
        End If
    End Sub

    Estou com o mesmo problema. Conseguiram uma solução?

    No meu caso, a coluna status muda de acordo com os dias vão passando, quando o prazo se esgota ela muda para Vencido. Quando o status muda pra vencido o macro não manda o email. Porém quando eu digito vencido o macro envia o email, mas sem conteúdo em branco.

    Muito obrigado

    quarta-feira, 3 de abril de 2013 16:11
  • Olá boa tarde,

    Eu usei esta solução mas não está funcionando :(

    existe alguma configuração que tenho de ter em conta para além da escrita do código?

    apenas fiz save...

    ja agora, tive de alterar "Plan1.Cells(linha, x)" para Folha2.Cells(linha2) - porque no menu da esquerda é esse nome que apresenta.

    Cumprimentos

    sexta-feira, 22 de janeiro de 2016 13:02
  • David !

    Conseguiu alguma ajuda, tenho a mesma situação.

    sexta-feira, 20 de outubro de 2017 16:54