Macro para enviar conteúdo de Célula do Excel por e-mail | Excelmax Soluções e Controles

terça-feira, dezembro 31, 2013

Macro para enviar conteúdo de Célula do Excel por e-mail


Macro para enviar conteúdo de Célula do Excel por e-mail

Link para download (no final da postagem) ajustado. Caso tenham problemas, me informem.

Email, Excel, ExcelMax
Muitas vezes precisamos enviar algumas informações via e-mail. Isso normalmente é feito de forma manual.

Esta matéria estará demonstrando como isso pode ser feito de forma automática. Podemos enviar uma "Pasta de Trabalho do Excel", apenas uma Planilha ou ainda, apenas parte de uma planilha.


Esta matéria foi publicada no site http://msdn.microsoft.com/pt-BR/ no seguinte link: social.msdn.microsoft.com explicando uma questão levantada pelo amigo Fernando.


ExcelMax SoluçõesO objetivo

Uma macro deve enviar um e-mail que está contido na Coluna "A" com as informações contidas em todas as colunas relativas a sua linha. O e-mail será disparado automaticamente apenas quando o status da coluna "F", que contém o status, for alterado para "Concluído".


Exemplo: se o status da Coluna "F" na Linha "4for alterado para "Concluído", um e-mail será enviado automaticamente ao endereço do usuário que está na coluna "A" com as informações de todas as colunas relativas a esta linha. Observe o exemplo na figura abaixo.
ExcelMax Soluções






As informações a serem enviadas devem ser organizadas no corpo do e-mail conforme orientações a seguir:

            Prezado(a) "E-MAIL DO USUÁRIO",
 
            A O.S. "Nº O.S." aberta em "DATA DA ABERTURA" foi Concluída.
  
             Veja informações abaixo:
                 Status: "INFORMAR O STATUS"
                 Ação tomada: "INFORMAR AÇÃO TOMADA"
            Atenciosamente,
            Help Desk

O desenvolvimento

Para a automatização deste procedimento, precisamos observar basicamente duas coisas importantes:
  1. Onde esta macro deve ser colocada;
  2. A Criação da Macro.

1. Onde esta macro deve ser colocada 
Para que a macro seja iniciada automaticamente, ela deve ser criada/inserida no Evento Change da planilha que contém os dados. Observe os destaques na figura abaixo.
ExcelMax Soluções


  1 - Refere-se ao número da linha atual.
  2 - Executa a macro a partir desta linha se o valor da coluna "F" da linha atual for alterado.
  3Executa a macro se o valor da coluna "F" da linha atual for alterado para "Concluído".
  4 - Monta o "texto" a ser incluso no corpo do e-mail.
  5 - Refere-se ao endereço de e-mail a ser utilizado.
  6 - Texto a ser incluso no corpo do e-mail.

Explicação sobre o comando "vbCrLf": utilizado na macro para incluir uma quebra de linha.

A figura a seguir, demonstra como ficarão as informações que foram inseridas automaticamente.


ExcelMax Soluções



Observação: Para que o Outlook não seja acionado e o e-mail seja enviado sem a necessidade de clicarmos no botão Enviar do Outlook, apenas altere o texto ".Display" para ".Send".

Observação: A macro na planilha, está comentada. Baixe a planilha, vá até o Visual Basic do Excel (Pressione ALT + F11) e retire os apóstrofos que comentam a macro para poder utilizá-la.
Compartilhe esta matéria com seus amigos.
Até a próxima.
Prof. Ivair Claudio Ferrari

    

78 comentários:

  1. Matéria campeã do ano. Parabéns professor e muito obrigado.

    ResponderExcluir
  2. Sem dúvidas, Prof Ivair, ficou simplesmente fantástico.

    Tenho certeza de que esta matéria vai ajudar muita gente.

    Um grande abraço do amigo Fernando.

    ResponderExcluir
  3. Sensacional!
    Estava precisando pra atender uma demanda lá no meu trabalho, e essa coube como uma luva.

    Apenas a adaptei num "módulo" para suprir as minhas necessidades.

    Parabéns Profº Ivair, sua ajuda tem nos ajudado a evoluir!!!

    ResponderExcluir
    Respostas
    1. Obrigado pelo seu comentário. Fico feliz em poder ajudar. Continue acessando pois novas matérias e novidades estarão sendo publicadas. Divulgue a seus amigos.

      Grande abraço!
      Professor Ivair.

      Excluir
  4. Olá, tentei utilizar a planilha mas ocorreu erro 429, o vba parou na linha de comando Set OutApp = CreateObject("Outlook.Application")
    Obs. No meu pc tenho windows live mail

    ResponderExcluir
    Respostas
    1. Aguinaldo Cardoso: Para que funcione vc deve ter instalado em seu computador o Microsoft Outlook.

      Excluir
  5. Grande Ivair , parabéns pelo site sou um apaixonado por excel e VB, estou aprendendo essa "arte" , uma duvida sobre essa planilha , tentei testar ela so que nao esta puxando as informaçoes das linhas , a planilha abre o outlook mas so vem o e-mail e o assunto , nao vem as informaçoes do texto , sabe o que pode ser?

    ResponderExcluir
    Respostas
    1. Caro amigo Kedley, Deve ser alguma biblioteca que está desabilitada em sem comutador. Para lhe ajudar precisaria ver a macro rodando. Se desejar, pode me adicionar no Skipe que podemos ver isso (Skipe: ivairferrari)

      Abraço!
      Ivair

      Excluir
  6. Ivair
    Achei sua planilha muito funcional mais não consigo fazer ela funcionar, eu baixei ela mais ela não envia o email.

    ResponderExcluir
    Respostas
    1. Caro amigo Adilson,

      Deve ser alguma biblioteca que está desabilitada (ou não instalada) em sem comutador. Para lhe ajudar precisaria ver a macro rodando. Se desejar, pode me adicionar no Skipe que podemos ver isso (Skipe: ivairferrari)

      Abraço!
      Ivair

      Excluir
  7. Caro amigo, gostaria de saber como faria para ele enviar as informações automático sem eu abrir a planilha com os conteúdos, tipo, quando tivesse faltando 10 dias para se vencer, ele disparasse um e-mail para mim.

    Agradeço pela ajuda.

    Claudionor.

    ResponderExcluir
    Respostas
    1. Claudionor,

      Para fazer isso, você deve utilizar a agenda do windows, e programar para que a mesma execute o Excel em determinada data e hora e na opção (macro) Auto_Open do Excel coloque um código (macro) que percorra a planilha em determinada coluna e faça a verificação que vc deseja enviando assim o email.

      Ivair.

      Excluir
  8. Não sou de comentar nem nada!

    Mas devo meus parabéns!!!
    Muito bem explicado e muito simples!!!

    Poderíamos encontrar mais matérias e funções como essa na internet!
    O Brasil agradeceria!

    ResponderExcluir
    Respostas
    1. Obrigado amigo Bruno pelo seu comentário!

      Continue acessando e divulgue a seus amigos. Em breve, novas matérias serão postadas.

      Se desejar ver algum assunto em específico, aqui no ExcelMax Soluções, favor solicitar que, assim que avaliado, o mesmo pode ser publicado.

      Grande Abraço!
      Consultor e Professor: Ivair Claudio Ferrari.

      Excluir
  9. Procurei, procurei e enfim ... encontrei. Um show. Parabéns professor. Era isso que eu precisava a muito tempo. Perdi muito tempo fazendo isso manualmente. Agora, vou ter mais tempo para outras atividades. Continue nos ajudando com suas publicações. Grande abraço!

    Abel Mitoure

    ResponderExcluir
  10. Simplesmente Sensacional, Parabéns pelo excelente trabalho;
    Ainda com uma duvida na coluna "F" eu criei um procv para quando alterado um valor de uma determinada planilha o Status mudasse para Concluído desde então a macro não envia mais email.
    Só Funciona se eu digitar concluído? Se houver formula na coluna ele não envia email?

    Forte Abraço.
    Alexsander Souza

    ResponderExcluir
    Respostas
    1. Alexsander, note a seguinte linha de comando:
      "If Target.Address = "$F$" & linha Then"

      Esta linha de comando faz com que a macro seja executada somente quando houver uma alteração direta na célula, ou seja, se você digitar ou em uma fórmula, na coluna "F", você pressionar a tecla 'F2' e depois 'Enter'. Se houver uma alteração apenas via fórmula a macro não é executada.

      Excluir
    2. Para que funcione, é preciso que seja executada a macro de alguma outra forma e não utilizando o comando 'Target'.

      Sugestão: Poderia ser criada uma macro para que percorresse a coluna "F" e, ao encontrar a palavra "Concluído", enviasse o conteúdo da linha por e-mail. Para que a mesma linha não seja enviada mais do que uma vez, ao executar o sugerido, poderia colocar em outra coluna (na mesma linha) um verificador, por exemplo, um 'OK'.

      Consultor e Professor Ivair Claudio Ferrari

      Excluir
    3. Professor, e como poderia criar essa macro para percorrer a Coluna?

      Excluir
    4. Não entendi sua pergunta. Vc quis dizer percorrer da esquerda para a direita em uma linha. Pq por coluna ela já faz...

      Excluir
    5. Bom dia professor.
      Eu estou com esse mesmo problema. Eu acreditava que mudando o evento de "Change" para "Calculate" a macro funcionaria normalmente, mas agora estou tendo problema com o comando "Target".

      Excluir
    6. Estarei publicando uma aula em meu canal no youtube explicando como fazer isso.

      Inscreva-se e receba informações: https://www.youtube.com/user/IVAIRFERRARI?sub_confirmation=1

      Excluir
  11. Muito Obrigado, Consegui chegar aonde eu queria Um Forte Abraço e Parabéns pelo excelente trabalho
    Abraço,
    Alexsander Souza

    ResponderExcluir
  12. O mesmo comentário, que o Alexsander, faço eu. Parabéns e obrigado por nos ajudar com ricas e tão claras explicações tanto nas matérias publicadas como nos comentários respondidos.

    Obrigado!
    Fidêncio

    ResponderExcluir
  13. Boa tarde, Nobre Amigo!

    Andei pesquisando um pouco sobre o ultimo sobre o ultimo comentario que eu postei e vi que é ´possivel abrir programas aparti do excel;
    é possivel quando alterar um valor de uma célula a macro abaixo seja executada?
    Private Sub SeuBotao_Click()
    ' Especificar 1 como o segundo argumento abre o aplicativo em
    ' tamanho normal e o coloca em foco.
    Dim RetVal
    RetVal = Shell("C:\Program Files\TIM Communicator\orolixcommunicator.exe", 1) ' Execute a calculadora.
    End Sub

    Abraço,
    Alexsander Curty

    ResponderExcluir
    Respostas
    1. O exemplo a seguir, executa o programa 'orolixcommunicator.exe' quando valor da célula "A1" da planilha ativa for alterado.

      Este código (macro) deve ser colocado na página de macro da planilha ativa. (para fazer isso clique com o botão direito do mouse na aba da planilha ativa, selecione a opção 'Exibir Código' e cole o código abaixo)

      Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Target.Address = "$A$1" Then
      Dim RetVal
      RetVal = Shell("C:\Program Files\TIM Communicator\orolixcommunicator.exe", 1)
      End If
      End Sub

      Prof. Ivair

      Excluir
  14. Muito bom professor. Gostaria de ver mais postagens sobre este assunto.

    Obrigado!
    Solano

    ResponderExcluir
  15. De primeira essa Macro, caiu feito uma luva.

    Porém ao tentar enviar o email aparece a mensagem: "Erro em tempo de execução '-2147417851 (80010105) O método To do objeto '_MailItem' falhou.

    Onde será que eu estou errando? Meu MS Outlook está ok no envio/recebimento.

    Abraços e parabéns pelo artigo incrível.

    ResponderExcluir
    Respostas
    1. Se puder me enviar a planilha por e-mail, posso analisar e verificar.

      Obrigado pelo comentário e um grande abraço!

      Excluir
    2. Meus dados de contato no topo do blog: Quem Somos ... Contato.

      Excluir
  16. Prof. Ivair,


    Muito obrigado pelo auxílio que foi de grande valia para meu projeto. Continue assim,

    exercendo essa tarefa sensacional e que admiro muito, que é a de compartilhar o

    conhecimento.

    ResponderExcluir
  17. Acabei de conhecer o site.
    Muito bom o artigo!
    Vou testar com adaptação para o meu arquivo, mas fiquei impressionada com a clareza das informações!

    Parabéns e Obrigada, Professor!

    ResponderExcluir
  18. Prof Ivair,
    Muito bom o post, excelente!! Agora tenho um problema: O status (Concluído) na minha planilha é dada através de uma fórmula e não simplesmente digitando, com a fórmula a macro não roda. Você pode me ajudar?

    Castelo Branco

    ResponderExcluir
    Respostas
    1. Olá caro amigo Castelo Branco !
      Note que na explicação da matéria, mencionei a utilização do 'Evento Change'. Desta forma, a macro roda apenas quando digitamos.
      Altere para o Evento "Worksheet_Calculate", ou seja, copie a macro que está no evento "Change" e cole ela no evento mencionado ("Worksheet_Calculate").

      Ivair

      Excluir
  19. Boa tarde Prof. Ivair.
    Parabéns pelo post ajudou muito! Estou com uma dificuldade, pois na coluna "Status" eu coloque lista suspensa (drop down) de forma o usuário selecionar o Status. Como faço para a macro disparar o e-mail caso o usuário selecione Concluído?
    Grato.
    Ricardo

    ResponderExcluir
    Respostas
    1. Olá Ricardo! Deve funcionar toda vez que a alteração ocorrer. Se desejar enviar uma planilha, posso analisar: ivairferrari@gmail.com.

      Excluir
  20. Ivair, parabéns pelo trabalho. Fiz alguma adaptações e consegui usá-la 100% do que eu precisava. Obrigado.

    ResponderExcluir
  21. Excelente planilha atendeu minhas necessidades.
    Apenas um ponto de atenção que conversando com o Ivair vale mencionar aqui.
    A planilha quando executada apresentava o erro abaixo:
    Erro em tempo de execução '-2147417851 (80010105) O método To do objeto '_MailItem' falhou.
    Conforme orientação do Ivair (que foi muito, simpático, atencioso e receptivo) é necessário incluir um '.Text' na frente da linha: .To = Plan1.Cells(linha, 1), ou seja, a linha ficará assim:
    .To = Plan1.Cells(linha, 1).Text

    Ivair, mais uma vez muito obrigada pela ajuda e disponibilidade.
    Um abraço.

    ResponderExcluir
  22. Boa tarde!

    Ivair, muito obrigado pela excelente publicação!

    Abraços!

    ResponderExcluir
  23. Já usava uma macro parecida mas esta é ainda melhor! Eu não sabia como fazer para usar o entrelinha! Parabéns e muito obrigado! Só gostaria de incrementar. O valor que a macro puxa do excel e leva para o email tem a formatação percentual no excel, mas quando leva para email não vai nesta formatação, vai em número. Dá pra mudar isso?

    ResponderExcluir
    Respostas
    1. Olá Amigo Flávio,
      Vamos usar a coluna "b" para resolver seu problema. Observe no código: Plan1.cells(linha, 2). Acrescentamos: Format(Plan1.cells(linha, 2),"dd/mm/yyyy") para garantir que o formato de data permaneça. Se fosse uma coluna com valores percentuais, poderíamos utilizar: Format(Plan1.cells(linha, 2),"0,00%").

      Excluir
  24. no excel o valor está com formatação percentual e quando vai para o email, não vai na mesma formatação. É possível alterar isso?

    ResponderExcluir
  25. Olá, minha macro não está funcionando. Não manda o e-mail quando digito "Concluído" e tenho Outlook instalado. O que pode ser?

    ResponderExcluir
  26. A macro não está rodando. Não chega e-mail algum quando digito "Concluído" e tenho Outlook instalado. O que pode ser?

    ResponderExcluir
  27. Parabéns, excelente macro. Preciso saber se posso colocar 2 condições para que o e-mail possa ser enviado.

    ResponderExcluir
    Respostas
    1. Bom dia Allan! É possível sim. Coloque um "AND" que quer dizer "E" na linha de comando:
      - If Plan1.cells(linha,6) = "Concluído" AND .... Then
      Caso não consiga fazer, envie um email com uma planilha exemplo mencionando a postagem. (ivairferrari@gmail.com)

      Excluir
  28. Fiz esse teste não deu, tem algo que deve ser feito na parte de selecionar a coluna? If Target.Address = ... Obrigado pelo retorno!

    ResponderExcluir
    Respostas
    1. Allan, publiquei uma vídeo aula em meu canal no youtube. De uma olhada e veja se lhe ajuda. Aguardo ser retorno.

      Link: https://youtu.be/zXQueOXDiQk

      Excluir
  29. Ivair bom dia, minha macro não está funcionando. Não manda o e-mail quando digito "Concluído" e tenho Outlook 2016 instalado, será que pode ser isto? Como instaciar OutLoook 2016 no Excel?

    ResponderExcluir
    Respostas
    1. Bom dia Jose! Acredito que para lhe ajudar, o melhor seria inciando com o envio de uma planilha exemplo para o meu email. Avalio e, se funcionar para mim, verificamos o próximo passo para lhe ajudar.

      Excluir
  30. Bom dia!
    Antes de mais nada, gostaria de agradecer a oportunidade de aprendizado.
    Eu estou com uma dificuldade. Segue abaixo:

    Quando a célula coincide com o nome especificado da macro, comigo digitando e apertando "enter" na célula, o e-mail é disparado normalmente. Mas no meu caso, eu obtenho informações do banco de dados. Então quando eu sincronizo a planilha com o banco e a situação da celula muda e coincide com o nome da macro, ele não dispara o email. Sabe alguma forma de enviar o email sem precisar digitar, fazendo apenas a obtenção dos dados do banco?

    ResponderExcluir
    Respostas
    1. Olá amigo Alan! Estarei publicando em meu canal no YouTube, uma matéria explicando como isso pode ser feito. Várias pessoas estão com a mesma dúvida/necessidade

      Se Você ainda não é inscrito em meu cana no YouTube, está convidado: https://www.youtube.com/ivairferrari/?sub_confirmation=1

      Excluir
  31. Boa tarde!
    Prezado professor parabéns pelo trabalho.
    Ja tem data pra postar o vídeo no seu canal explicando como enviar o email sem a necessidade de apertar o enter na celula ?
    Obrigado

    ResponderExcluir
    Respostas
    1. Estarei publicando uma vídeo aula falando sobre o assunto nos próximos dias (entre esta semana e a próxima). Inscreva-se em meu canal e fique sabendo das novidades e novas aulas.

      Excluir
  32. Ola Ivair, parabéns pela divulgação e por compartilhar seu conhecimento!! Estou tentando fazer com que o status seja alterado atraves de uma lista suspensa, porém ele não reconhece a alteração somente com F2 e Enter. Tentei alterar de Change para Calculate, mas não obtive sucesso. Poderia me ajudar?

    ResponderExcluir
    Respostas
    1. Estarei publicando uma vídeo aula falando sobre o assunto nos próximos dias (entre esta semana e a próxima). Inscreva-se em meu canal e fique sabendo das novidades e novas aulas.

      Excluir
  33. Bom dia Prof Ivair,
    tudo bem?
    Então, está macro de disparo de e-mail, simplesmente top de linha. Mas infelizmente, estou tendo problemas, para disparar e-mails algumas linhas da planilha. Pois ao informar o campo "Pago" o outlook envia o e-mail automatico, mas algumas linhas, simplesmente não acontece nada.
    Tem alguma solução para este caso?

    ResponderExcluir
    Respostas
    1. Olá! Vc deve ter errado alguma coisa na macro ou na sua planilha. Para um diagnóstico, é preciso ver a planilha. Endereço de email nos comentários acima.

      Excluir
    2. Descobri o problema, não estava enviando o e-mail devido a planilha estar com o filtro ativo. Depois que retirei o filtro o mesmo voltou a funcionar normalmente.

      Excluir
  34. Obrigada pelo artigo!!

    Eu queria enviar um e-mail toda vez que a data de hoje fosse igual a data de determinada(s) coluna(s) da minha planilha!

    Será que alguém pode ma ajudar??

    ResponderExcluir
  35. Sr. Ivair , boa tarde!

    Estou tentando inserir mais de uma Worksheet_change , porem ele retorna dizendo que ja existe outra , uma ambiguidade.Como posso inserir mais de uma na planlilha?

    ResponderExcluir
  36. Sr. Ivair , boa tarde!

    Como posso inserir mais de um evento worksheet_change ? No meu caso preciso de mais de uma modificação e o excel esta voltando uma ambiguidade.

    ResponderExcluir
  37. Boa tarde Prof Ivair,
    tudo bem? Parabéns pela divulgação e por compartilhar seu conhecimento!!
    Então, quando tento executar a macro ela gera um erro e manda depurar em If Target.Adress = "$I$" & linha Then... Pode me ajudar?

    ResponderExcluir

Seja um participante desta comunidade !
Deixe aqui seu comentário e/ou sugestão.
Obrigado !

Ivair Claudio Ferrari