Blog

Postado em em 21 de novembro de 2020

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!

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!

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 = "[email protected]"
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 Sub

Explicaçã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 “[email protected]. 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 Object

Nesta linha estamos criando uma instância do Outlook dentro do VBA e um novo e-mail.

Dim lin As Long, ultLin As Long

Aqui 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.

Enviar relatório
Enviar relatório
Dim caminhoPasta As String

Esta linha determina o caminho da pasta onde estão os arquivos que vamos enviar

Dim caminhoPDF As String

Dentro das pastas temos os arquivos em PDF, esta linha obtém o caminho da pasta + relatório.

ultLin = Range("A1000000").End(xlUp).Row

Nesta 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).Row

Qual 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.Send
Next lin

Esta 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 = Nothing

Nestas 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!


Quer aprender mais sobre VBA com um minicurso básico gratuito?

Quer sair do zero no Python e virar uma referência na sua empresa? Inscreva-se agora mesmo no Python Impressionador