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.
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.
O 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 "4" for 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.
As informações a serem enviadas devem ser organizadas no corpo do e-mail conforme orientações a seguir:
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
Help Desk
O desenvolvimento
Para a automatização deste procedimento, precisamos observar basicamente duas coisas importantes:
- Onde esta macro deve ser colocada;
- 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.
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.
3 - Executa 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.
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.
2 - Executa a macro a partir desta linha se o valor da coluna "F" da linha atual for alterado.
3 - Executa 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.
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
Até a próxima.
Prof. Ivair Claudio Ferrari
Matéria campeã do ano. Parabéns professor e muito obrigado.
ResponderExcluirObrigado por sempre estar participando caro amigo Solano.
ExcluirO cara é bom parabéns
ExcluirSem dúvidas, Prof Ivair, ficou simplesmente fantástico.
ResponderExcluirTenho certeza de que esta matéria vai ajudar muita gente.
Um grande abraço do amigo Fernando.
Valeu Fernando! Obrigado pelo feedback.
ExcluirIvair
Parabéns pela matéria !
ResponderExcluirObrigado!
ExcluirSensacional!
ResponderExcluirEstava 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!!!
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.
ExcluirGrande abraço!
Professor Ivair.
Olá, tentei utilizar a planilha mas ocorreu erro 429, o vba parou na linha de comando Set OutApp = CreateObject("Outlook.Application")
ResponderExcluirObs. No meu pc tenho windows live mail
Aguinaldo Cardoso: Para que funcione vc deve ter instalado em seu computador o Microsoft Outlook.
ExcluirGrande 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?
ResponderExcluirCaro 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)
ExcluirAbraço!
Ivair
Ivair
ResponderExcluirAchei sua planilha muito funcional mais não consigo fazer ela funcionar, eu baixei ela mais ela não envia o email.
Caro amigo Adilson,
ExcluirDeve 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
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.
ResponderExcluirAgradeço pela ajuda.
Claudionor.
Claudionor,
ExcluirPara 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.
Não sou de comentar nem nada!
ResponderExcluirMas 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!
Obrigado amigo Bruno pelo seu comentário!
ExcluirContinue 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.
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!
ResponderExcluirAbel Mitoure
Valeu caro Abel. Fico feliz por tê-lo ajudado.
ExcluirProf. Ivair
Simplesmente Sensacional, Parabéns pelo excelente trabalho;
ResponderExcluirAinda 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
Alexsander, note a seguinte linha de comando:
Excluir"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.
Para que funcione, é preciso que seja executada a macro de alguma outra forma e não utilizando o comando 'Target'.
ExcluirSugestã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
Professor, e como poderia criar essa macro para percorrer a Coluna?
ExcluirNão entendi sua pergunta. Vc quis dizer percorrer da esquerda para a direita em uma linha. Pq por coluna ela já faz...
ExcluirBom dia professor.
ExcluirEu 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".
Estarei publicando uma aula em meu canal no youtube explicando como fazer isso.
ExcluirInscreva-se e receba informações: https://www.youtube.com/user/IVAIRFERRARI?sub_confirmation=1
Muito Obrigado, Consegui chegar aonde eu queria Um Forte Abraço e Parabéns pelo excelente trabalho
ResponderExcluirAbraço,
Alexsander Souza
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.
ResponderExcluirObrigado!
Fidêncio
Boa tarde, Nobre Amigo!
ResponderExcluirAndei 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
O exemplo a seguir, executa o programa 'orolixcommunicator.exe' quando valor da célula "A1" da planilha ativa for alterado.
ExcluirEste 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
Muito bom professor. Gostaria de ver mais postagens sobre este assunto.
ResponderExcluirObrigado!
Solano
bom
ResponderExcluirDe primeira essa Macro, caiu feito uma luva.
ResponderExcluirPoré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.
Se puder me enviar a planilha por e-mail, posso analisar e verificar.
ExcluirObrigado pelo comentário e um grande abraço!
Meus dados de contato no topo do blog: Quem Somos ... Contato.
ExcluirBom
ResponderExcluirProf. Ivair,
ResponderExcluirMuito 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.
Acabei de conhecer o site.
ResponderExcluirMuito 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!
Prof Ivair,
ResponderExcluirMuito 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
Olá caro amigo Castelo Branco !
ExcluirNote 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
Boa tarde Prof. Ivair.
ResponderExcluirParabé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
Olá Ricardo! Deve funcionar toda vez que a alteração ocorrer. Se desejar enviar uma planilha, posso analisar: ivairferrari@gmail.com.
ExcluirIvair, parabéns pelo trabalho. Fiz alguma adaptações e consegui usá-la 100% do que eu precisava. Obrigado.
ResponderExcluirObrigado e parabéns a vc também. Grande abraço!
ExcluirExcelente planilha atendeu minhas necessidades.
ResponderExcluirApenas 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.
Denise: Obrigado pelo comentário!
ExcluirBoa tarde!
ResponderExcluirIvair, muito obrigado pela excelente publicação!
Abraços!
Valeu amigo. Abraço!
ExcluirJá 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?
ResponderExcluirOlá Amigo Flávio,
ExcluirVamos 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%").
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?
ResponderExcluirResposta logo acima.
Excluirótima planilha
ResponderExcluirOlá, minha macro não está funcionando. Não manda o e-mail quando digito "Concluído" e tenho Outlook instalado. O que pode ser?
ResponderExcluirA macro não está rodando. Não chega e-mail algum quando digito "Concluído" e tenho Outlook instalado. O que pode ser?
ResponderExcluirEnvie sua planilha para que eu possa analisá-la.
ExcluirParabéns, excelente macro. Preciso saber se posso colocar 2 condições para que o e-mail possa ser enviado.
ResponderExcluirBom dia Allan! É possível sim. Coloque um "AND" que quer dizer "E" na linha de comando:
Excluir- 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)
Fiz esse teste não deu, tem algo que deve ser feito na parte de selecionar a coluna? If Target.Address = ... Obrigado pelo retorno!
ResponderExcluirAllan, publiquei uma vídeo aula em meu canal no youtube. De uma olhada e veja se lhe ajuda. Aguardo ser retorno.
ExcluirLink: https://youtu.be/zXQueOXDiQk
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?
ResponderExcluirBom 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.
Excluiremail: ivairferrari@gmail.com
ExcluirBom dia!
ResponderExcluirAntes 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?
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
ExcluirSe Você ainda não é inscrito em meu cana no YouTube, está convidado: https://www.youtube.com/ivairferrari/?sub_confirmation=1
Boa tarde!
ResponderExcluirPrezado 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
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.
ExcluirOla 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?
ResponderExcluirEstarei 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.
ExcluirBom dia Prof Ivair,
ResponderExcluirtudo 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?
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.
ExcluirDescobri 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.
ExcluirObrigada pelo artigo!!
ResponderExcluirEu 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??
Sr. Ivair , boa tarde!
ResponderExcluirEstou 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?
Sr. Ivair , boa tarde!
ResponderExcluirComo 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.
Boa tarde Prof Ivair,
ResponderExcluirtudo 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?