É possível enviar emails através do VBA. Um modo simples de se fazer isto é com o auxilio do Outlook.
Como visto em VBA Bibliotecas, primeiramente se faz necessário habilitar a biblioteca de referência, realizando o procedimento no formato Early Binding.
Para isto:
Lembre-se que é possível realizar este procedimento com formato Late Binding permitindo uma maior compatibilidade com versões anteriores do Excel.
Certifique-se de configurar uma conta no Outlook previamente antes de executar as macros.
Escolha entre a forma Early ou Late.
Código com Early Binding
Neste caso habilite a biblioteca do Outlook como explicado acima.
Dim OutApp As Outlook.Application
Dim OutMail As Outlook.MailItem
Set OutApp = New Outlook.Application 'Objeto para Outlook
Set OutMail = OutApp.CreateItem(olMailItem) 'Objeto para email dentro do Outlook
Código com Late Binding
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application") 'Objeto para Outlook
Set OutMail = OutApp.CreateItem(0) 'Objeto para email dentro do Outlook
Associamos valores a algumas propriedades do objeto OutMail para construção do email.
With OutMail
.body = "Olá," & vbNewLine & "Este é um exemplo de email"
.Subject = "Exemplo de assunto"
.To = "EXEMPLO_DESTINATÁRIO@EMAIL.COM" 'Substitua o email desta linha
.Display 'Método para mostrar o conteúdo
End With
O método .Display auxilia na construção do código, pois deixa visível o email para validação, apesar de não ser necessário para o funcionamento do processo.
Se tudo estiver conforme planejado basta apenas enviá-lo para o destinatário:
OutMail.Send 'Envia o email
Como bom costume, desassocie os objetos com a palavra-chave Nothing para limpá-los da memória.
Set OutMail = Nothing Set OutApp = Nothing
Teremos então o seguinte processo:
Sub emailSimples()
'Utilizando Late Binding
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application") 'Objeto para Outlook
Set OutMail = OutApp.CreateItem(0) 'Objeto para email dentro do Outlook
With OutMail
.body = "Olá," & vbNewLine & "Este é um exemplo de email"
.Subject = "Exemplo de assunto"
.To = "EXEMPLO_DESTINATÁRIO@EMAIL.COM" 'Substitua o email desta linha
.Display 'Método para mostrar o conteúdo
End With
OutMail.Send 'Enviar email
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
Podemos construir uma macro para enviarmos um email com um relatório em anexo e a sua a prévia como imagem no corpo da mensagem.
Para este exercício teremos dois Workbooks: RelatorioVendas.xlsx (o relatório) e EnviandoEmail.xlsm (arquivo com a macro).
Prévia do RelatorioVendas.xlsx
Dentro de um módulo em EnviandoEmail.xlsm podemos adicionar o seguinte código:
Sub enviarEmail()
'Declaração de variáveis
Dim i as integer
Dim WBk As New Workbook
Dim abaRelatorio As Worksheet
Dim Rng As Range
Dim Arquivo As String
Dim OutApp As Object
Dim OutMail As Object
'Defina o caminho do relatório
Arquivo = "C:\...\RelatorioVendas.xlsx" 'Substitua pelo caminho de onde está RelatorioVendas.xlsx
Set WBk = Workbooks.Open(Filename:=Arquivo, ReadOnly:=False, Notify:=False)
NomeRelatorio = Right(Arquivo, (Len(Arquivo) - InStrRev(Arquivo, "\")))
Set WBk = Workbooks(NomeRelatorio)
'O código acima equivale a: Set WBk = Workbooks("RelatorioVendas.xlsx")
Set abaRelatorio = WBk.Worksheets(1) 'Aba do relatório de onde será gerada uma imagem
'Range na qual se gerará a imagem
Set Rng = abaRelatorio.Range("A1:E6")
'Será criada uma aba chamada "Temp" para temporariamente estocar as mensagens no corpo do email
Worksheets.Add After:=WBk.Sheets(WBk.Sheets.Count)
ActiveSheet.Name = "Temp"
'Texto do corpo do email
Cells(1, 1) = "Prezados,"
Cells(2, 1) = "Segue abaixo a prévia do relatório de resultados."
'Utilizaremos a propriedade WordEditor para realizar colagens no corpo do email
'É importante carregar o Outlook para que a propriedade WordEditor funcione adequadamente
Shell ("C:\Program Files (x86)\Microsoft Office\root\Office16\OUTLOOK.EXE")
Application.Wait (Now + TimeValue("0:00:05")) 'Aguardar Outlook abrir
'Early Binding
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(olMailItem)
With OutMail
.to = "DESTINATARIO@EMAIL.COM" 'Insira o/os destinatários como String
.CC = "COPIADO1@EMAIL.COM; COPIADO2@EMAIL.COM" 'Aqui ficam os copiados, também como String
.Subject = "Relatório de resultados" 'Assunto do email
.Display
End With
Set wEditor = OutApp.ActiveInspector.WordEditor
'Utilização do WordEditor para colar elementos no corpo do email
OutApp.ActiveWindow.Activate 'Ativar janela do email para colagem
For i = 1 To 2
Cells(i, 1).Select
Cells(i, 1).Copy
wEditor.Application.Selection.PasteSpecial xlPasteValues
Next i
abaRelatorio.Activate
abaRelatorio.Range(Rng.Address).Select
Selection.CopyPicture xlScreen, xlPicture 'Copiar como imagem
wEditor.Application.Selection.Paste
'Anexando o arquivo RelatorioVendas.xlsx no email
With OutMail
.Attachments.Add (Arquivo)
End With
Application.DisplayAlerts = False 'Desabilite o alerta de mensagens para macro não parar
Worksheets("Temp").Delete 'Remoção da aba criada apenas para conter o texto que será enviado
Application.DisplayAlerts = True
'Execute até aqui, caso não queira enviar o email
OutMail.Send 'Enviar o email
'Desassociar as variáveis
Set WBk = Nothing
Set abaRelatorio = Nothing
Set OutApp = Nothing
Set OutMail = Nothing
Set wEditor = Nothing
End Sub
Veja que neste exemplo foi utilizado a propriedade WordEditor para realizar tarefas relacionadas com colagens no corpo do email, diferentemente do exemplo simples anteriormente demonstrado.
WordEditor é uma forma de se colar imagens junto com texto.
Exercícios Sugeridos
SuperExcelVBA.com é um site voltado ao aprendizado de VBA. Exemplos e explicações podem ter sido simplificados para maior e mais veloz compreensão. Estamos constantemente nos atualizando e corrigindo erros, porém não existe garantia sobre o conteúdo disponível no site. Todos os direitos reservados.
Excel ® é uma marca registrada da Microsoft Corporation.
© 2024 SuperExcelVBA | SOBRE