Como Enviar E-mail Pelo Excel com VBA [Tutorial Completo]
Sim, é possível automatizar o processo de envio de e-mails e nessa publicação vou te ensinar tudo sobre como enviar e-mail pelo Excel!
Resposta rápida: para enviar e-mail pelo Excel com VBA, o código cria um objeto do Outlook, monta a mensagem e chama .Send. É preciso ter o Outlook instalado e configurado na máquina. No corpo, use .HTMLBody em vez de .Body para preservar a assinatura e colar tabela formatada, e .Attachments.Add para anexar o arquivo.
Temos duas aulas, cada uma mostra uma maneira de enviar e-mail pelo VBA!
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
O que você aprende neste vídeo
Resposta rápida: A aula complementa duas aulas anteriores do canal sobre o tema: uma macro monta no Outlook um e-mail com destinatário, cópia, cópia oculta e assunto, texto em HTML, imagem no corpo, tabela do Excel, assinatura padrão e anexo, e um botão na planilha dispara tudo.
Neste vídeo (32 min):
- 0:43 - As três novidades pedidas pelo público: copiar células do Excel para o corpo do e-mail, colocar a imagem dentro do corpo em vez de anexar e usar a assinatura do Outlook
- 2:25 - Prévia do resultado: ao clicar no botão, abre-se um e-mail do Outlook com anexo, destinatário, cópia, cópia oculta, assunto, texto, imagem, tabela e assinatura padrão
- 3:03 - Antes do código, é preciso ter uma assinatura pronta no Outlook: a aula mostra como criar uma e deixá-la como a das novas mensagens
- 4:54 - Primeira instrução: cria o objeto do Outlook, uma aplicação do Outlook, e depois uma instância de um novo e-mail
- 7:20 - O destinatário vem da célula da linha 2, coluna 1 da planilha, e não de um endereço digitado no código
- 10:00 - O corpo do e-mail é escrito em HTML, porque assim ficam mais fáceis a assinatura, a imagem e a tabela
- 17:09 - A imagem entra no corpo com a tag de imagem do HTML e o caminho do arquivo, copiado pelo Explorador de Arquivos
- 20:18 - Uma função que converte um intervalo de células em HTML coloca a tabela do Excel no corpo, com fonte, cor e formato
- 25:00 - Como manter a assinatura padrão do Outlook no e-mail montado pelo código
- 26:56 - O anexo entra com
.Attachments.Adde o caminho do arquivo entre aspas - 28:21 - A instrução de envio manda o e-mail direto, sem deixá-lo aberto para conferir
- 28:58 - Cria o botão na planilha com uma forma de retângulo de cantos arredondados e atribui a macro a ele
Trechos do vídeo:
- A assinatura padrão do Outlook pode ser mantida no e-mail montado pelo código porque, ao abrir um e-mail novo, o corpo só tem a assinatura: o texto novo é escrito e o conteúdo original do corpo é juntado no final.
- A função que converte um intervalo em HTML não é nativa do VBA: em outra planilha, é preciso inserir um módulo e colar o código dela, dando os créditos a quem a criou.
- Ao atribuir um objeto a uma variável no VBA, a instrução leva
Set; quando a variável recebe número ou texto, não precisa.
Para receber a planilha que usamos na aula no seu e-mail, preencha:
Como enviar e-mail pelo Excel?
Hoje nós vamos mostrar como enviar e-mail pelo Excel. Vamos detalhar o código necessário para que você entenda todo o passo a passo. Vamos precisar do aplicativo do Outlook instalado no seu computador, criar um código para enviar o e-mail e um botão para disparar esse código.
Já existem outros vídeos no canal sobre essa aplicação, mas hoje iremos além atendendo a diversas sugestões como: assinatura; tabela; anexo. Observe então os passos necessários:
1) Assinatura no Outlook
Precisamos configurar uma assinatura padrão dentro do Outlook. Para isso, criaremos um e-mail do zero. Com o novo e-mail aberto, iremos à caixinha de Assinatura -> Assinaturas... e irá digitar o que interessar na caixa em questão, e adicionará uma imagem do seu computador, se quiser que tenha uma imagem acompanhada do texto da assinatura, como mostramos no vídeo. Após isso, precisará dar um nome para ela, salvar, mudar a caixinha de “Nova Mensagem” para o nome da assinatura que você deu, e dar Ok. Feito isso, teremos uma nova assinatura configurada para cada novo e-mail aberto.
2) Código de Como Enviar E-mail pelo Excel
Sub enviar_email()
Set objeto_outlook = CreateObject("Outlook.Application")
Set Email = objeto_outlook.createitem(0)
Email.display
Email.to = Cells(2, 1).Value
Email.cc = Cells(3, 1).Value
Email.bcc = "diego@gmail.com"
Email.Subject = "Relatório de Vendas"
texto1 = "Fala " & Cells(2, 2).Value & "!<br><br>Dá uma olhada nessa imagem e nessa tabela que separei para você!<br><br>"
Email.htmlbody = texto1 & "<img src='C:UsersdamorOneDriveHashtag (1)OnlineConteúdosPlanilhas2020VBA11-14 - Enviar E-mail pelo VBATabela.png'>" _
& "<br><br>" _
& RangetoHTML(Range("A5:C11")) _
& Email.htmlbody
Email.Attachments.Add ("C:UsersdamorOneDriveHashtag (1)OnlineConteúdosPlanilhas2020VBA11-14 - Enviar E-mail pelo VBATabela.png")
Email.send
End SubExplicação do código:
Primeiro precisaremos “setar” um objeto para assumir a aplicação do Outlook, é o que fazemos com a nossa primeira linha de instrução. Toda vez que nos referirmos ao objeto “objeto_outlook”, estaremos falando da aplicação do Outlook, ou seja, do programa, em si.
Depois precisaremos “setar” um objeto para assumir o papel do e-mail dentro do Outlook, que nada mais é do que um novo item no outlook. Isso está traduzido na nossa segunda linha do código. Então, toda vez que nos referirmos ao objeto “E-mail”, estaremos falando de um novo e-mail criado dentro do Outlook.
Em seguida, apenas mostraremos o nosso “E-mail” em tela. Caso esse comando não esteja presente, ele fará todos os passos da macro, mas não mostrará em sua tela o que ocorreu.
Depois, configuraremos os campos do nosso e-mail. O destinatário (to) será quem estiver escrito na célula A2. A cópia (cc) irá para quem estiver na célula A3. A cópia oculta (bcc) será enviada para "diego@gmail.com". O assunto (subject) do nosso e-mail será “Relatório de Vendas”.
Para o corpo do e-mail, vamos usar uma variável auxiliar chamada texto1. Nela, vamos armazenar o texto que queremos inserir no nosso corpo de e-mail. Ela será composta da seguinte maneira:
texto1 = "Fala " & Cells(2, 2).Value & "!<br><br>Dá uma olhada nessa imagem e nessa tabela que separei para você!<br><br>" será responsável por armazenar na variável texto1 o texto com o nome da pessoa presente na célula A2 do nosso Excel, quebrar a linha (pular 1 linha) em HTML (forma que o e-mail é escrito no Outlook), e escrever outra parte de texto, e juntar tudo isso.
A próxima linha vai nos dizer o que o corpo do e-mail (html body) deve conter: o que queremos que seja escrito (dado pela variável texto1), de fato, e duas imagens: uma que será importada pela linguagem HTML (a que carrega o prefixo img src), a que usa uma fonte de informação (image source), e uma que usará uma função pronta específica do VBA para tal (RangetoHTML), além de fechar com a nossa assinatura. A repetição da estrutura “html body” no final da nossa linha representa a nossa assinatura.
Para ter acesso a essa função do VBA, precisaremos copiar o código inteiro da função que está presente no nosso Módulo 2 do arquivo de gabarito, e colar num módulo em branco em nossa planilha de Excel. Para isso, iremos, no ambiente do VBA em Inserir -> Módulo -> Colar o o código da nossa Function já pronto. Só assim teremos o poder da função “RangetoHTML” do código que criamos. Sem isso, ela não representará nada. Lembrando que para ela funcionar, precisamos passar como argumento um intervalo de células que desejamos colocar no e-mail. No nosso exemplo é o intervalo de células entre a célula A5 e C11.
Depois iremos passar a instrução do que teremos como anexo no nosso e-mail (attachments.add). Simplesmente diremos o caminho do arquivo que queremos que, ao criar um novo e-mail, que o Excel coloque como anexo.
E por fim, o comando que enviará o e-mail é o Email.send. Feito isso, nosso e-mail estará enviado e acaba a nossa macro.
Após terminar a nossa macro, devemos criar um botão para que a nossa macro seja ativada, ao clicar nesse botão. Ele será o ativador e disparador da nossa macro. Para isso, no Excel iremos na guia Inserir > Ilustrações > Formas > Retângulo: Cantos Arredondados (2º ícone da categoria de Retângulos). A partir dessa escolha, redimensione a ilustração conforme o seu gosto, e pronto.
Após isso, vamos personalizar o botão. Para isso, iremos dar um clique com o botão esquerdo do mouse nele, e escreveremos o que desejamos que esteja escrito nele. No nosso exemplo, escrevemos “Nome”, fomos na guia Página Inicial, e botamos o alinhamento no meio e centralizamos o texto, além de colocar em negrito. Para finalizar, iremos colocar um sombreamento, indo em Formato de Forma > Efeitos de Forma > Predefinição > Predefinições > Predefinição 2. E colocamos a cor cor de preferência.
Após criar e personalizar o botão da forma que queremos, devemos dizer que macro estará atribuída a ele. No caso, queremos atrelar o botão à nossa macro “enviar_email”. Para isso, devemos clicar com o botão direito do mouse no nosso botão criado -> Atribuir macro... -> clicar em “enviar_email” -> OK. E pronto, agora o nosso botão está ativado e pode ser usado para disparar a macro a partir de qualquer clique nele com o botão esquerdo.
Como Enviar Relatórios por E-mail Utilizando o VBA
Caso prefira esse conteúdo no formato de vídeo-aula, assista ao vídeo abaixo!
Para receber a planilha que usamos na aula no seu e-mail, preencha:
Nesta aula vamos aprender como fazer o envio de relatórios por e-mail com VBA! O passo a passo é bastante semelhante ao da aula anterior, com algumas sutis mudanças...
Vem comigo que eu te mostro!
Para facilitar, vou colocar o código do VBA que está disponível completo no material didático e explicar cada parte dele:
Sub enviarEmails() -> O início da macro é sempre marcado pelo Sub + o nome da macro sem espaços ou caracteres especiais.
Dim outlook As Object, novo_email As ObjectNesta linha estamos criando uma instância do Outlook dentro do VBA e um novo e-mail.
Dim lin As Long, ultLin As LongAqui estamos percorrendo as linhas da nossa tabela do Excel e determinando a última linha porque precisamos saber qual o tamanho da nossa lista de e-mails.

Dim caminhoPasta As StringEsta linha determina o caminho da pasta onde estão os arquivos que vamos enviar
Dim caminhoPDF As StringDentro das pastas temos os arquivos em PDF, esta linha obtém o caminho da pasta + relatório.
ultLin = Range("A1000000").End(xlUp).RowNesta criamos a variável outlook, sempre que nos referirmos a algo dentro do outlook vamos ter que usar esta variável...
ultLin = Range("A1000000").End(xlUp).RowQual a última linha da tabela? Esta linha encontra a última linha preenchida da tabela procurando a partir da última linha da planilha e dando seta para cima.
Precisamos determinar a última linha preenchida para saber quantos e-mails vamos precisar mandar antes de encerrar a macro.
caminhoPasta = "C:\Users\Diego\OneDrive - hashtagtreinamentos.com\Hashtag\Online\Arquivos das Aulas\2023\VBA\03-24 - Enviando relatórios por e-mail utilizando o VBA\"Caminho dos arquivos
Estrutura de repetição FOR
Vamos usar o FOR como a estrutura de repetição responsável por enviar todos os e-mails da tabela, começando da linha 2 (linha 1 é o cabeçalho) até a última linha preenchida.
For lin = 2 To ultLin
Set novo_email = outlook.CreateItem(0)
Exibir a caixa de e-mail
novo_email.display
Definindo as variáveis do e-mail
nome = Cells(lin, 1).Value
endEmail = Cells(lin, 2).Value
relatorio = Cells(lin, 3).Value
caminhoPDF = caminhoPasta & relatorio & ".pdf"
Definir o destinatário e o assunto
novo_email.To = endEmail
novo_email.Subject = "Relatório " & relatorio & " - " & Date
Escrevendo o corpo to e-mail
novo_email.HTMLbody = nome & ",<br><br>Segue em anexo o Relatório " & relatorio & ".<br><br>Att,<br>Diego Amorim"
Adicionando o anexo
novo_email.Attachments.Add caminhoPDF
Enviando o e-mail
novo_email.SendNext linEsta linha retorna para o começo do For até que todas as linhas da tabela sejam usadas.
MsgBox ("E-mails enviados!")No final colocamos uma caixa com a mensagem de finalização.
Set outlook = Nothing
Set novo_email = NothingNestas duas linhas estamos zerando as instâncias que abrimos do outlook e e-mail no começo do código (boa prática).
End Sub -> Encerramos a macro.
Conclusão - Como enviar e-mail pelo excel
Portanto, vimos como enviar e-mail pelo Excel com VBA e como enviar relatórios pelo VBA de forma personalizada. Essas são aplicações muito legais que mostram o poder da ferramenta de programação em Excel!
Ficamos por aqui! Para mais conteúdo de VBA acesse nosso canal do YouTube ou siga nossas redes sociais! Um abraço,
Hashtag Treinamentos
Para acessar outras publicações de VBA, clique aqui!

