[VBA] – Enviar Email do Outlook usando o Excel

Tempo de leitura: menos de 1 minuto

Olá pessoal.

A função abaixo é muito interessante para quem tem uma rotina de enviar relatórios pelo e-mail. As vezes você precisa de produtividade até no envio do relatório, por isso criar uma rotina no VBA para encaminhar e-mail com arquivos em anexo é interessante.

Não há segredos nessa função:

Declaramos as variáveis e criamos os objetos necessários. Contudo, é obrigatório importar a biblioteca de classe que permite esse envio. No menu do Editor de Visual Basic acesse: Ferramentas > Referencias >Microsoft Outlook 14.0 Object Library.

As variaveis endereco, arquivo, destino, assunto, mensagem devem ser customizadas pelo usuario.

Pronto! A função já pode rodar.

[sourcecode highlight=”” language=”vb”]

Sub Envio()
Dim endereco, arquivo, destino, assunto, mensagem As String
Dim row, report As Integer
Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem

Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(olMailItem)

Application.DisplayAlerts = False

destino = <a href="mailto:teste@teste.com.br">teste@teste.com.br</a>
endereco = "C:\Ususarios\meunome\Imagens\"
arquivo = "Foto.png"
assunto = "Minhas fotos"
mensagem = "Segue minha foto"
With OutMail

.To = destino
.CC = ""
.BCC = ""
.Subject = assunto
.Body = mensagem
.Attachments.Add (endereco & arquivo)
.Send

End With

Application.DisplayAlerts = True

Set OutMail = Nothing

Set OutApp = Nothing

End Sub
[/sourcecode]

Abraços.

29 Comentários


  1. Pessoal, boa tarde !
    Preciso de uma coisa mais ou menos parecida…
    Tenho um controle de estoque em uma planilha excel onde está compartilhada pra várias pessoas e conforme vão uçtilizando os itens de meu estoque eu preciso abrir um pedido de compra para repor os itens.
    Existe alguma maneira de quando esses itens estiverem em uma situação crítica, EX: 10 peças para acabar, atravéz de vba o excel mandar um e-mail para mim avisando sobre as peças que estão acabando, ou para eu verificar a planilha ?

    Por favor me ajudem preciso muito disso !

    Responder

    1. Gilson, boa noite!

      É possível sim, basta vc criar uma rotina que verifique se o estoque está abaixo de 10 toda vez que alguém utilizar os itens e fizer a baixa na planilha, sendo assim, a rotina chamará a função que envia o email(nesse topico), porem vale salientar que o usuario que utiliza a planilha tem quem ter email ativo com o outlook, pois o email partirá dele do outlook.

      Espero que tenha ajudado.

      Responder

  2. Pessoal, bom dia !

    Primeiramente quero agradecer pelo apoio e em seguida gostaria de pedir se vocês não podem me ajudar com a questão do código em VBA pra eu poder automatizar minha planilha aqui na empresa, eu sei dos conceitos do VBA e tudo que pode fazer porém ainda não sei trabalhar com isso… preciso aprender !!!
    Então gostaria de pedir para postar ou mandar em meu e-mail este código se não for pedir demais.

    Agradeço pela ajuda desde já. Meu e-mail: gilson.s.ferreira@gmail.com

    Responder

  3. Boa tarde,

    gostaria de saber se há a possiblidade de que o arquivo em anexo a ser enviado, fosse a propria planilha com o botão de enviar o email, onde seria criado um novo arquivo excel, com a cópia da sheet(“Plan”) da planilha original, e este novo arquivo seria o arquivo em anexo.

    Obrigado pela ajuda, se puder enviar no email ou apenas avisar que foi respondido: pedromc89@gmail.com

    Responder

    1. Pode sim sem problemas o anexo nada mais eh do setar um endereco de uma arquivo. O que vc precisa antes eh criar um rotina que copie a sheet um e salve em pasta padrao. Em seguida vc senta o arquivo nessa pasta padrao para ser anexada.

      Responder

    1. Ronny. Como seria a estrutura que vc planeja para seu Form? Acredito que nao seja muito complicado, vc so precisa criar campos para cada variavel da rotina. Por exemplo a Sub Envio estaria vinculada a o evento de click de um botao. As variaveis destino, endereco, arquivo, assunto e mensagem vc colocaria em componentes por exemplo:

      destino = textbox1.text

      Responder


  4. Amigo, se no caso eu quisesse substituir o envio do e-mail pela opção de envio de sms pelo próprio outlook como seria?

    Responder

  5. É a primeira vez que entro na página, achei muito bom, parabéns pelo trabalho.
    Mas ainda estou com uma dúvida, como faço para no “corpo de email” colocar também gráficos do excel (Ou Chart). É possível?
    Abraço!

    Responder

  6. Boa tarde!
    Gostaria de ajuda para enviar um e-mail sem nada em anexo, apenas uma macro que ao clicar em um ícone, um e-mail é disparado via Outlook. Contendo apenas assunto e mensagem.
    No aguardo de uma resposta, obrigada!

    Responder

  7. Boa Tarde
    utilizo essa rotina a tempos, só que agora preciso enviar mais que um anexo, como faço?

    Responder

    1. Julio. Voce precisa criar uma loop no codigo para ele repetir a operação de anexo. Ou entao basta voce repetir a linha Attachments.Add . Qual seu nivel de vba ? Tente estudar sobre FOR NEXT. ABS

      Responder

  8. Caro, você saberia informar se tem algum código para PowerPoint que realize a mesma função ou abrir um e-mail através de um botão no PowerPoint?

    Responder

  9. .Attachments.Add (endereco & arquivo)

    Quando chego nesta estapa, esta dando erro de não localização do arquivo. O que pode ser ? O caminho esta correto.

    Responder

Deixe uma resposta

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