Como Enviar E-mails pelo Outlook Usando VBA no Excel

Para enviar e-mails pelo Outlook usando VBA no Excel, crie uma referência ao Outlook com Dim OutApp As Object: Set OutApp = CreateObject(“Outlook.Application”), gere um novo e-mail com OutApp.CreateItem(0), preencha as propriedades .To, .Subject e .Body, e finalize com .Send (ou .Display para revisar antes de enviar) — sem precisar copiar e colar endereços manualmente.

Você já teve uma planilha com uma lista de clientes ou fornecedores e precisou mandar um e-mail parecido, um por um, trocando só o nome e um valor específico em cada mensagem, um processo repetitivo e sujeito a erro de copiar o destinatário errado?

Sem automatizar esse envio, a alternativa é abrir o Outlook manualmente para cada linha da planilha, copiar o endereço, digitar o assunto e colar o texto do corpo, um trabalho que cresce proporcionalmente ao número de contatos e vira inviável a partir de algumas dezenas de e-mails.

Neste artigo iremos mostrar como referenciar o Outlook a partir do VBA do Excel, montar e enviar um e-mail simples, anexar um arquivo e disparar e-mails em lote para uma lista inteira de contatos com um loop.

DOMINE EXCEL COMIGO

QUERO APRENDER EXCEL

Por que usar VBA para enviar e-mails direto do Excel

O Excel não envia e-mails sozinho, mas consegue controlar o Outlook por trás dos panos através do VBA, desde que o Outlook esteja instalado e configurado no computador. Isso permite montar e-mails automaticamente a partir de dados já existentes na planilha — nome, endereço, valores — sem precisar copiar nada manualmente para o corpo da mensagem.

Referenciando o Outlook: Late Binding versus Early Binding

Existem duas formas de o VBA “enxergar” o Outlook. A mais simples, chamada Late Binding, usa CreateObject(“Outlook.Application”) numa variável declarada como Object genérico, e funciona sem nenhuma configuração extra no editor VBA. A segunda forma, Early Binding, exige ativar manualmente, em Ferramentas > Referências dentro do editor VBA, a opção Microsoft Outlook XX.X Object Library, e declarar a variável como Outlook.Application — essa forma oferece sugestões automáticas de código (IntelliSense) enquanto você digita, mas depende da referência estar habilitada em cada computador onde a macro roda. Para a maioria dos casos, o Late Binding é a opção mais simples e portátil.

Código básico para enviar um e-mail simples

O núcleo do envio usa poucas linhas:

Linha Código
1 Dim OutApp As Object, OutMail As Object
2 Set OutApp = CreateObject(“Outlook.Application”)
3 Set OutMail = OutApp.CreateItem(0)
4 OutMail.To = “cliente@empresa.com.br”
5 OutMail.Subject = “Relatório mensal”
6 OutMail.Body = “Segue em anexo o relatório deste mês.”
7 OutMail.Send

O número 0 dentro de CreateItem(0) representa o tipo de item “e-mail” (o valor correspondente à constante olMailItem do Outlook). As propriedades .To, .CC e .BCC aceitam múltiplos endereços separados por ponto e vírgula dentro do mesmo texto.

Preenchendo destinatário, assunto e corpo com dados da planilha

Em vez de digitar o e-mail e o texto fixos no código, substitua por referências às células da planilha: OutMail.To = Cells(linha;1).Value busca o endereço da coluna A daquela linha, e o corpo pode ser montado concatenando texto fixo com valores de células, como OutMail.Body = “Olá, ” & Cells(linha;2).Value & “. Seu saldo atual é R$ ” & Cells(linha;3).Value.

Anexando um arquivo ao e-mail

Para incluir um anexo, use o método .Attachments.Add, informando o caminho completo do arquivo: OutMail.Attachments.Add “C:\Relatorios\relatorio_mensal.pdf”. Esse comando pode ser repetido várias vezes na mesma macro para anexar mais de um arquivo ao mesmo e-mail.

Enviando e-mails em lote com um loop

Para percorrer uma lista de contatos e enviar um e-mail para cada linha, o código de montagem do e-mail entra dentro de um loop For, variando a linha lida a cada repetição:

Nome E-mail Valor pendente
Marcos Silva marcos@empresa.com.br 1.240
Juliana Reis juliana@empresa.com.br 860
Renata Costa renata@empresa.com.br 2.100

Com essa tabela em A2:C4, a macro usa For linha = 2 To 4, e dentro do loop monta e envia um e-mail por linha, trocando Cells(linha;1), Cells(linha;2) e Cells(linha;3) para pegar o nome, o e-mail e o valor de cada contato antes de chamar .Send e passar para a próxima repetição do loop.

Send versus Display: revisar antes de enviar

Trocar .Send por .Display abre o e-mail já pronto na tela do Outlook, permitindo revisar (ou editar manualmente) antes de clicar em enviar, em vez de disparar automaticamente. Essa troca é recomendada enquanto você está testando a macro, evitando enviar e-mails de teste por engano para contatos reais.

Cuidados e erros comuns

O Outlook precisa estar instalado e com uma conta já configurada no computador onde a macro roda — o VBA não consegue configurar uma conta de e-mail do zero. Versões mais recentes do Outlook podem exibir um alerta de segurança perguntando se um programa externo pode enviar e-mails em seu nome, principalmente na primeira execução; esse aviso é uma proteção do próprio Outlook contra vírus e não é um erro da macro. Ao usar Early Binding, lembre-se de que a referência à biblioteca do Outlook precisa estar ativada em cada computador que for rodar a macro — o Late Binding evita esse problema.

Disponibilidade

O envio de e-mails via VBA depende do Outlook estar instalado no Windows — o recurso não funciona no Excel Online, no Excel para Mac (que não tem essa mesma integração de automação com o Outlook) nem no Google Sheets, que não tem suporte a VBA.

Perguntas frequentes

Preciso ter o Outlook aberto para a macro funcionar?

Não necessariamente aberto antes de rodar — o comando CreateObject(“Outlook.Application”) abre o Outlook automaticamente em segundo plano caso ele não esteja em execução, desde que esteja instalado no computador.

É possível enviar o e-mail sem que ele apareça na tela?

Sim, usando .Send em vez de .Display o e-mail é enviado diretamente, sem abrir nenhuma janela visível. Use .Display durante os testes para conferir o conteúdo antes de automatizar o envio final com .Send.

Essa técnica funciona com Gmail ou outro serviço de e-mail?

Não diretamente — o código deste artigo controla especificamente o aplicativo Outlook instalado no Windows. Para enviar e-mails por outros serviços a partir do VBA, seria necessário usar bibliotecas ou protocolos diferentes, como CDO ou SMTP direto.

Veja também: Como Usar Loops no VBA do Excel: For, For Each e Do While e Power Automate com Excel: Como Automatizar Tarefas Sem Saber VBA.

Compartilhe ou Comente

Se você curtiu esse artigo aonde mostramos como enviar e-mails pelo Outlook usando VBA no Excel, desde um e-mail simples até o envio em lote para uma lista de contatos com anexo, compartilhe com as suas redes sociais e não se esqueça de deixar um comentário aqui embaixo caso você tenha ficado com alguma dúvida.

Você já perdeu tempo mandando o mesmo e-mail, um por um, para uma lista de contatos? Pretende automatizar esse envio a partir da sua planilha atual? Conta para nós nos comentários!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *