Tutorial do Excel – Enviar e-mails a partir do Excel
Normalmente, utilizamos clientes de e-mail como o Outlook ou o Gmail para enviar mensagens. No entanto, muitas pessoas armazenam dados numa pasta de trabalho do Excel e precisam partilhar parte desses dados com terceiros enquanto trabalham neles. Nesses casos, enviar e-mails diretamente a partir da pasta de trabalho do Excel poupa o tempo que gastariam a utilizar um cliente de e-mail externo. Este tutorial passo a passo mostra-lhe como enviar e-mails a partir do Excel em diferentes cenários.
Nota: Antes de aplicar os métodos seguintes, certifique-se de que tem o Outlook configurado como cliente de e-mail no seu computador e definido como predefinido.
Índice:[ Ocultar ]
1. Noções básicas sobre o envio de e-mails diretamente do Excel
Esta secção apresenta os conceitos essenciais para enviar e-mails diretamente a partir do Excel.
1,1 Enviar e-mails a partir do Excel com funções incorporadas do Excel
Se pretender enviar apenas e-mails simples a partir do Excel — incluindo unicamente os campos Para, Assunto, Cc e corpo da mensagem — as funções incorporadas do Excel podem ajudá-lo.
1,1.1 Enviar e-mail a partir do Excel utilizando uma fórmula
Conforme ilustrado na tabela abaixo, para enviar diferentes e-mails a partir do Excel com base nos campos fornecidos, basta utilizar referências de células desses campos para criar fórmulas de Hiperligação distintas e concluir a tarefa. Após criar as hiperligações de e-mail, clique simplesmente na hiperligação pretendida para enviar automaticamente a mensagem.
Nota: Se houver mais do que um destinatário nos campos Para ou Cc, separe-os com ponto e vírgula.

Esta secção está dividida em quatro partes para lhe mostrar, passo a passo, como adicionar separadamente à fórmula de Hiperligação o endereço de e-mail do destinatário, os destinatários em cópia (Cc), a linha de assunto e o corpo da mensagem. Siga as instruções abaixo.
A sintaxe e os argumentos da função «HIPERLIGAÇÃO» são os seguintes:
Sintaxe
HYPERLINK(link_location, [friendly_name])
Argumentos
1,1.1,1 Adicionar Endereço de Email à fórmula de Hiperligação
Neste caso, utilizamos «mailto:» na fórmula para incluir um destinatário de e-mail. Como o endereço de e-mail do primeiro destinatário está na célula B2, basta adicionar «mailto:» seguido da referência à célula B2.
“mailto:”&B2
1. Selecione uma célula para exibir a hiperligação — neste caso, escolhi a célula F2.
2. Em seguida, insira a seguinte fórmula nessa célula.
=HYPERLINK("mailto:"&B2) 
Nota: ao premir a tecla «Enter», será criada uma hiperligação, tal como ilustrado na imagem seguinte. Ao clicar nessa ligação, abre-se automaticamente uma nova mensagem no Outlook, com o endereço de e-mail do destinatário já preenchido no campo Para.

O endereço de e-mail do destinatário foi agora adicionado à fórmula da hiperligação. Prossiga com os passos seguintes para incluir, conforme necessário, a linha de assunto, os destinatários em cópia (Cc) e o corpo da mensagem.
1,1.1,2 Adicionar destinatário(s) Cc à fórmula de Hiperligação
Para adicionar destinatário(s) em cópia (Cc) à função Hiperligação, inclua «?cc=» na fórmula da seguinte forma:
A fórmula na célula F2 deverá ser a seguinte:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2) 
1,1.1,3 Adicionar linha de assunto à fórmula de Hiperligação
Para adicionar a linha de assunto à função Hiperligação, inclua «&subject=» na fórmula da seguinte forma:
A fórmula na célula F2 deverá agora ter o seguinte aspeto:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2) 
1,1.1,4 Adicionar texto do corpo com quebras de linha à fórmula de Hiperligação
O último passo consiste em adicionar o texto do corpo à fórmula de Hiperligação. Como pode observar no exemplo, as duas linhas de texto em E2 estão separadas por uma quebra de linha — e pretende manter essa quebra no corpo do e-mail. Será que o Outlook reconhece a quebra de linha nesta situação? Vamos verificar.
Para incluir o texto do corpo na fórmula de Hiperligação, basta adicionar «&body=» à fórmula da seguinte forma.
A fórmula na célula F2 é agora apresentada da seguinte forma:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2) 
Nota: Ao premir a tecla «Enter» e clicar na ligação, poderá verificar no Novo Email que o conteúdo do corpo da mensagem aparece numa única linha.

Para apresentar o corpo do e-mail em linhas separadas, basta modificar o conteúdo da célula, inserindo o código de caractere «%0A» (Retorno de Carro) exatamente onde desejar incluir uma quebra de linha. Veja a imagem:

1,1.1,5 Especificar o texto a apresentar para a hiperligação
Nos passos anteriores, concluímos o argumento Link_location com os campos do e-mail. Nesta secção, vamos finalizar o próximo argumento: [nome_friendly].
Neste caso, pretendo que a célula da hiperligação exiba o texto «E-mail para xx», em que «xx» corresponde ao nome do destinatário na célula A2. Assim, a fórmula em F2 deverá ser alterada para:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2, "Email to "&A2) Prima a tecla «Enter» para obter o seu resultado.

Selecione esta célula com a fórmula e arraste a sua «Alça de Preenchimento Automático» para baixo para criar outras hiperligações de e-mail. Veja a imagem:

1,1.2 Enviar e-mail a partir do Excel com a função Hiperligação
Além de utilizar a fórmula de hiperligação indicada acima, pode criar manualmente uma hiperligação de e-mail com a função «Criar Hiperlink» no Excel. Esta secção mostra-lhe os passos necessários.
1. Clique com o botão direito do rato na célula onde deseja inserir uma hiperligação e escolha «Ligação» no menu de contexto.

2. Na caixa de diálogo «Criar Hiperligação» que surge, configure-a da seguinte forma.

Ao clicar na hiperligação, é automaticamente criado um e-mail no Outlook com os campos Para, Assunto e Corpo já preenchidos, tal como mostrado na imagem seguinte.

Notas:
1,2 Enviar e-mail para múltiplos destinatários em células com script VBA
No exemplo anterior, pode observar que vários endereços de e-mail aparecem numa única célula, separados por ponto e vírgula. Se tiver uma lista de endereços de e-mail, como ilustrado na imagem seguinte, e pretender enviar um e-mail (ou e-mails individuais) para todos eles, o código VBA seguinte poderá ajudá-lo.

1,2.1 Enviar um e-mail para múltiplos destinatários em células com script VBA
1. Na folha de cálculo que contém todos os endereços de e-mail para os quais pretende enviar a mensagem, prima as teclas «Alt» + «F11» para abrir a janela «Microsoft Visual Basic para Aplicações».
2. Na janela «Microsoft Visual Basic para Aplicações», clique em «Inserir» > «Módulo» e cole o código seguinte na janela «Módulo (Código)».

Código VBA: Enviar e-mail para uma lista de Endereço de Email
Sub sendmultiple()
'updateby Extendoffice 20220802
Dim xOTApp As Object
Dim xMItem As Object
Dim xCell As Range
Dim xRg As Range
Dim xEmailAddr As String
Dim xTxt As String
On Error Resume Next
xTxt = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select the addresses list:", "Kutools for Excel", xTxt, , , , , 8)
If xRg Is Nothing Then Exit Sub
Set xOTApp = CreateObject("Outlook.Application")
For Each xCell In xRg
If xCell.Value Like "*@*" Then
If xEmailAddr = "" Then
xEmailAddr = xCell.Value
Else
xEmailAddr = xEmailAddr & ";" & xCell.Value
End If
End If
Next
Set xMItem = xOTApp.CreateItem(0)
With xMItem
.To = xEmailAddr
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
.Display
End With
End Sub 3. Prima a tecla «F5» para executar o código e surgirá a caixa de diálogo «Kutools para Excel». Selecione a lista de endereços de e-mail e clique em «OK».

Notas:
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel" Após executar o código, todos os endereços de e-mail no intervalo selecionado serão exibidos no campo Para da janela da mensagem. Veja a imagem:

1,2.2 Enviar separadamente e-mails para cada destinatário listado em células com script VBA
O código anterior adiciona todos os endereços de e-mail no intervalo selecionado ao campo Para da janela da mensagem. Se pretender enviar e-mails individualmente para cada endereço listado nas células, sem que os destinatários vejam os endereços uns dos outros, experimente o seguinte script VBA.
1. Na folha de cálculo que contém todos os endereços de e-mail para os quais pretende enviar mensagens, prima as teclas «Alt» + «F11» para abrir a janela «Microsoft Visual Basic para Aplicações».
2. Na janela «Microsoft Visual Basic para Aplicações», clique em «Inserir» > «Módulo» e cole o código seguinte na janela do Módulo (Código).
Código VBA: Enviar e-mails separadamente para cada Lista de Endereços de e-mail nas células
Sub SendEmailToAddressInCells()
'Updated by Extendoffice 20220802
Dim xRg As Range
Dim xRgEach As Range
Dim xRgVal As String
Dim xAddress As String
Dim xOutApp As Outlook.Application
Dim xMailOut As Outlook.MailItem
On Error Resume Next
xAddress = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select the addresses list", "KuTools For Excel", xAddress, , , , , 8)
If xRg Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xRg = xRg.SpecialCells(xlCellTypeConstants, xlTextValues)
For Each xRgEach In xRg
xRgVal = xRgEach.Value
If xRgVal Like "?*@?*.?*" Then
Set xMailOut = xOutApp.CreateItem(olMailItem)
With xMailOut
.To = xRgVal
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel"
.Display
'.Send
End With
End If
Next
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub 3. Em seguida, clique em «Ferramentas» > «Referências». Na caixa de diálogo «Referências – VBAProject», localize e ative a opção «Microsoft Outlook 16,0 Object Library» e, depois, clique em «OK» para guardar as alterações.

4. Prima a tecla «F5» para executar o código e surgirá a caixa de diálogo «Kutools para Excel». Selecione a lista de endereços de e-mail e clique em «OK».

Notas:
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel" Neste exemplo, existem seis endereços de e-mail no intervalo selecionado, pelo que serão criadas automaticamente seis janelas de mensagem do Outlook, cada uma com uma lista distinta de endereços de e-mail no campo Para, conforme ilustrado na imagem seguinte.

5. Por fim, clique no botão «Enviar» para enviar os e-mails individualmente.
2. Inserir anexo ou assinatura do Outlook em e-mails enviados a partir do Excel (com scripts VBA)
Esta secção mostra-lhe como inserir um anexo ou incluir a assinatura predefinida do Outlook nos e-mails enviados a partir do Excel.
2,1 Inserir Anexo nos e-mails enviados a partir do Excel
Aqui apresentamos os diferentes cenários para inserir um anexo, permitindo-lhe escolher o método que melhor se adapta às suas necessidades. Nesta secção, aprenderá a (clique em qualquer uma das seguintes ligações para aceder ao método correspondente):
2,1.1 Enviar um determinado ficheiro como anexo
Pode utilizar o seguinte código VBA para enviar, diretamente do Excel, um ou mais ficheiros de uma pasta como anexos por correio eletrónico.
1. Prima as teclas «Alt» + «F11».
2. Na janela «Microsoft Visual Basic for Applications» que se abre, clique em «Inserir» > «Módulo» e, de seguida, cole o seguinte código VBA na janela do Módulo (Código).
Código VBA: Enviar ficheiros numa pasta como anexos a partir do Excel
Sub EmailWithAttachments()
'Updated by Extendoffice 20220802
Dim xStrFile As String
Dim xFilePath As String
Dim xFileDlg As FileDialog
Dim xFileDlgItem As Variant
Dim xOutApp As Outlook.Application
Dim xMailOut As Outlook.MailItem
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
Set xFileDlg = Application.FileDialog(msoFileDialogFilePicker)
If xFileDlg.Show = -1 Then
With xMailOut
.BodyFormat = olFormatRichText
.To = "xxx@aaa.com"
.Subject = "test"
.HTMLBody = "test"
For Each xFileDlgItem In xFileDlg.SelectedItems
.Attachments.Add xFileDlgItem
Next xFileDlgItem
.Display
End With
End If
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub Notas:
3. Em seguida, clique em «Ferramentas» > «Referências». Na caixa de diálogo «Referências – VBAProject», localize e ative a opção «Microsoft Outlook 16,0 Object Library» e, depois, clique em «OK» para guardar as alterações.

4. Prima a tecla «F5» para executar o código; em seguida, abrir-se-á uma janela «Procurar». Selecione os ficheiros que pretende anexar ao correio eletrónico e clique em «OK».

Em seguida, abre-se uma janela de mensagem, onde pode verificar que os ficheiros selecionados aparecem como anexos no campo Anexos.

2,1.2 Enviar o Planilha Atual como anexo
Se pretender enviar a Planilha Atual como anexo diretamente do Excel, pode utilizar o script VBA nesta secção.
1. Prima as teclas «Alt» + «F11».
2. Na janela «Microsoft Visual Basic for Applications» que se abre, clique em «Inserir» > «Módulo». Em seguida, cole o seguinte código VBA na janela «Módulo (Código)».
Código VBA: Enviar o Planilha Atual como anexo
Sub SendWorkSheet()
'Update by Extendoffice 20220802
Dim xFile As String
Dim xFormat As Long
Dim Wb As Workbook
Dim Wb2 As Workbook
Dim FilePath As String
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Application.ScreenUpdating = False
Set Wb = Application.ActiveWorkbook
ActiveSheet.Copy
Set Wb2 = Application.ActiveWorkbook
Select Case Wb.FileFormat
Case xlOpenXMLWorkbook:
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
Case xlOpenXMLWorkbookMacroEnabled:
If Wb2.HasVBProject Then
xFile = ".xlsm"
xFormat = xlOpenXMLWorkbookMacroEnabled
Else
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
End If
Case Excel8:
xFile = ".xls"
xFormat = Excel8
Case xlExcel12:
xFile = ".xlsb"
xFormat = xlExcel12
End Select
FilePath = Environ$("temp") & "\"
FileName = Wb.Name & Format(Now, "dd-mmm-yy h-mm-ss")
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte features"
.Body = "Please check and read this document."
.Attachments.Add Wb2.FullName
.Display
'.Send
End With
Wb2.Close
Kill FilePath & FileName & xFile
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Application.ScreenUpdating = True
End Sub Notas:
3. Prima a tecla «F5» para executar o código; em seguida, a Planilha Atual é guardada como uma Pasta de Trabalho do Excel e anexada automaticamente numa janela de mensagem. Veja a captura de ecrã:

Nota: O livro anexado, que contém apenas a Planilha Atual, tem o mesmo nome do livro original, ao qual é ainda adicionada a hora de execução do código no nome da pasta de trabalho.
2,1.3 Enviar o Livro de Trabalho Atual como anexo
Depois de aprender o código VBA para enviar a planilha atual como anexo diretamente do Excel, apresentamos agora outro script VBA que permite enviar todo o livro como anexo. Siga os passos abaixo.
1. Prima as teclas «Alt» + «F11».
2. Na janela «Microsoft Visual Basic for Applications» que se abre, clique em «Inserir» > «Módulo» e, de seguida, cole o seguinte código VBA na janela do Módulo (Código).
Código VBA: Enviar o Livro de Trabalho Atual como anexo a partir do Excel
Sub SendWorkBook()
'Update by Extendoffice 20220802
Dim OutlookApp As Object
Dim OutlookMail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
On Error Resume Next
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub Notas:
3. Prima a tecla «F5» para executar o código; o Livro de Trabalho Atual será então inserido automaticamente na janela de mensagem como anexo. Veja a captura de ecrã:

2,1.4 Enviar todo o livro como anexo PDF
A maioria das pessoas costuma guardar uma pasta de trabalho do Excel como um ficheiro PDF e enviá-lo como anexo a outras pessoas. Nesta secção, mostramos-lhe uma forma de enviar mensagens diretamente do Excel, com o livro atualmente aberto anexado automaticamente como PDF — sem precisar de o guardar manualmente nesse formato.
1. Prima as teclas «Alt» + «F11».
2. Na janela «Microsoft Visual Basic for Applications» que se abre, clique em «Inserir» > «Módulo» e cole o seguinte código VBA na janela do módulo (Código).
Código VBA: Enviar todo o livro como anexo PDF
Sub SendWorkBookAsPDF()
'Update 20220803
Dim Wb As Workbook
Dim FilePath As String
Dim FileName As String
Dim xOutApp As Object
Dim xOutMail As Object
On Error Resume Next
Application.ScreenUpdating = False
Set Wb = Application.ActiveWorkbook
FileName = Left(Wb.Name, (InStrRev(Wb.Name, ".", -1, vbTextCompare) - 1)) & Format(Now, "dd-mmm-yy h-mm-ss") & ".pdf"
FilePath = Environ$("temp") & "\" & FileName
Wb.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
FilePath, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
With xOutMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FilePath
.Display 'or use .Send
End With
Kill FilePath
Set xOutMail = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub Notas:
3. Prima a tecla «F5» para executar o código. O Livro de Trabalho Atual será então inserido automaticamente como anexo em formato PDF numa nova janela de mensagem. Veja a captura de ecrã:

2,1.5 Enviar o Planilha Atual como anexo PDF
Por exemplo, imagine que tem um livro chamado «Vendas mensais», no qual criou uma tabela de relatório de vendas numa folha denominada «relatório de vendas» e pretende enviar essa folha como um ficheiro PDF aos seus colegas. O código VBA seguinte pode ajudá-lo.
1. Prima as teclas «Alt» + «F11».
2. Na janela «Microsoft Visual Basic for Applications» que se abre, clique em «Inserir» > «Módulo» e cole o seguinte código VBA na janela do módulo (Código).
Código VBA: Enviar o Planilha Atual como anexo PDF
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FileName
.Display
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub Notas:
3. Prima a tecla «F5» para executar o código. Em seguida, a Planilha Atual é automaticamente inserida como anexo em Arquivos PDF numa nova janela de mensagem. Veja a captura de ecrã:

2,2 Inserir assinatura do Outlook nas mensagens enviadas a partir do Excel
Tomando o caso anterior como exemplo, ao aplicar o código VBA acima para enviar a planilha atual como anexo em ficheiros PDF a partir do Excel, não é possível incluir automaticamente a assinatura do Outlook na janela de mensagem. Para garantir que a assinatura predefinida do Outlook seja mantida na mensagem enviada a partir do Excel, utilize o método seguinte.
Abaixo estão listados dois códigos VBA.
Código VBA 1: Este código ajuda a preservar a assinatura do Outlook.
Código VBA 2: Este código permite enviar a planilha atual como anexo em PDF.
Código VBA 1: Manter assinatura do Outlook
.HTMLBody = "Email body" & "
" & .HTMLBody Código VBA 2: Enviar o Planilha Atual como anexo PDF
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.Body = "test"
.Attachments.Add FileName
.Display
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 1. Normalmente, tem de premir as teclas «Alt» + «F11» para abrir a janela do Microsoft Visual Basic for Applications.
2. Na janela «Microsoft Visual Basic for Applications», clique em «Inserir» > «Módulo» e cole o código VBA acima na janela do Módulo (Código).
3. Para manter a assinatura predefinida do Outlook nas mensagens enviadas a partir do Excel, deve modificar o código VBA 2 da seguinte forma:

Eis o código completo após a modificação.
Sub SendWorkSheetToPDF()
'Update by Extendoffice 20220803
Dim Wb As Workbook
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set Wb = Application.ActiveWorkbook
FileName = Wb.FullName
xIndex = VBA.InStrRev(FileName, ".")
If xIndex > 1 Then FileName = VBA.Left(FileName, xIndex - 1)
FileName = FileName & "_" + ActiveSheet.Name & ".pdf"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:=FileName
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.Display
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "test"
.HTMLBody = "Email body" & "
" & .HTMLBody
.Attachments.Add FileName
'.Send
End With
Kill FileName
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 4. Prima a tecla «F5» para executar o código. Em seguida, surgirá uma nova janela de mensagem com a Planilha Atual anexada como ficheiro PDF, e a assinatura predefinida do Outlook será inserida automaticamente no final do corpo da mensagem.

3. Envie mensagens automaticamente a partir do Excel assim que uma condição for cumprida (com scripts VBA)
Nos exemplos anteriores, é necessário executar manualmente o código para enviar a mensagem. Caso pretenda que o código seja ativado automaticamente assim que uma determinada condição for cumprida — por exemplo, quando uma célula atingir um valor específico, quando o valor de uma célula for alterado ou quando uma data for alcançada — a mensagem será enviada sem intervenção adicional. Esta secção apresenta as condições mais frequentemente procuradas pelos utilizadores do Excel no Google, para o ajudar a enviar mensagens automaticamente a partir do Excel assim que essas condições forem satisfeitas.
3,1 Enviar automaticamente uma mensagem quando uma célula atingir um determinado valor
Conforme ilustrado na captura de ecrã abaixo, imagine que tem uma tabela de vendas em que a célula D6 contém o total das vendas. Pretende enviar automaticamente uma mensagem ao seu chefe com base nesse valor — por exemplo, disparar uma mensagem sempre que o total das vendas ultrapassar 10 000 €, sem qualquer ação caso o total seja igual ou inferior a esse montante.

1. Na folha de cálculo que contém a tabela de vendas, clique com o botão direito do rato no separador da folha e escolha «Ver código» no menu de contexto.

2. Na janela «Microsoft Visual Basic for Applications» que se abre, cole o seguinte código VBA na janela «Folha (Código)».

Código VBA: Enviar automaticamente uma mensagem quando uma célula atingir um determinado valor no Excel
Dim xRg As Range
'Update by Extendoffice 20200803
Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Target.Cells.Count > 1 Then Exit Sub
Set xRg = Intersect(Range("D6"), Target)
If xRg Is Nothing Then Exit Sub
If IsNumeric(Target.Value) And Target.Value > 10000 Then
Call Mail_small_Text_Outlook
End If
End Sub
Sub Mail_small_Text_Outlook()
Dim xOutApp As Object
Dim xOutMail As Object
Dim xMailBody As String
Set xOutApp = CreateObject("Outlook.Application")
Set xOutMail = xOutApp.CreateItem(0)
xMailBody = "Hi boss" & vbNewLine & vbNewLine & _
"Total sales of over $10,000 in January: " & Range("D6")
On Error Resume Next
With xOutMail
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "test"
.Body = xMailBody
.Display 'or use .Send
End With
On Error GoTo 0
Set xOutMail = Nothing
Set xOutApp = Nothing
End Sub
Private Sub Worksheet_Calculate()
Dim xI As Integer
Dim xRg As Range
Set xRg = Range("D6")
On Error GoTo Err01
xI = Int(xRg.Value)
If xI > 10000 Then
Call Mail_small_Text_Outlook
End If
Err01:
End Sub Notas:
xMailBody = "Hi boss" & vbNewLine & vbNewLine & _
"Total sales of over $10,000 in January: " & Range("D6") A partir de agora, sempre que o valor na célula D6 exceder 10 000, será exibida uma mensagem conforme ilustrado na captura de ecrã abaixo.

3,2 Enviar automaticamente uma mensagem quando o valor de uma célula for alterado
Conforme ilustrado na captura de ecrã abaixo, suponha que recebe um livro que contém vendas mensais em diferentes folhas de cálculo e o total das vendas numa folha específica. Precisa de verificar o total das vendas e, se este for modificado, enviar o livro de volta ao remetente e informá-lo de que a célula foi alterada.

1. Na folha de cálculo que contém a tabela de vendas, clique com o botão direito do rato no separador da folha e escolha «Ver código» no menu de contexto.

2. Na janela «Microsoft Visual Basic for Applications» que se abre, cole o seguinte código VBA na janela Folha (Código).
Código VBA: Enviar automaticamente uma mensagem quando o valor de uma célula especificada for alterado
Private Sub Worksheet_Change(ByVal Target As Range)
'Updated by Extendoffice 20220803
Dim xRgSel As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xMailBody As String
Dim xBoolean As Boolean
Dim xItsRG As Range
Dim xDDs As Range
Dim xDs As Range
On Error Resume Next
Application.ScreenUpdating = False
Application.DisplayAlerts = False
xBoolean = False
Set xRg = Range("B14")
Set xItsRG = Intersect(Target, xRg)
Set xDDs = Intersect(Target.DirectDependents, xRg)
Set xDs = Intersect(Target.Dependents, xRg)
If Not (xItsRG Is Nothing) Then
Set xRgSel = xItsRG
xBoolean = True
ElseIf Not (xDDs Is Nothing) Then
Set xRgSel = xDDs
xBoolean = True
ElseIf Not (xDs Is Nothing) Then
Set xRgSel = xDs
xBoolean = True
End If
ActiveWorkbook.Save
If xBoolean Then
Debug.Print xRgSel.Address
Set xOutApp = CreateObject("Outlook.Application")
Set xMailItem = xOutApp.CreateItem(0)
xMailBody = "The cell " & xRgSel.Address(False, False) & _
" in the worksheet '" & Me.Name & "' were modified on " & _
Format$(Now, "mm/dd/yyyy") & " at " & Format$(Now, "hh:mm:ss") & _
" by " & Environ$("username") & "."
With xMailItem
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "Worksheet modified"
.Body = xMailBody
.Attachments.Add (ThisWorkbook.FullName)
.Display
End With
Set xRgSel = Nothing
Set xOutApp = Nothing
Set xMailItem = Nothing
End If
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub Notas: No código,
A partir de agora, sempre que o valor na célula B14 for alterado, será automaticamente criada uma mensagem do Outlook, tal como ilustrado na captura de ecrã abaixo.

3,3 Enviar automaticamente uma mensagem quando um livro for guardado
Se tiver um livro que precise de partilhar com outras pessoas após modificação, normalmente terá de o guardar, abrir o cliente de correio eletrónico, criar um novo e-mail com o livro anexado, preencher os respetivos campos e enviar a mensagem. Esta secção mostra-lhe um método para criar automaticamente essa mensagem sempre que guardar o livro. Siga estes passos:
1. Prima as teclas «Alt» + «F11» para abrir a janela do Microsoft Visual Basic for Applications.
2. Nesta janela, faça duplo clique em «EsteLivro» no painel «Projeto» e cole o seguinte código VBA na janela «EsteLivro (Código)».

Código VBA: Enviar automaticamente uma mensagem quando um livro for guardado
Private Sub Workbook_AfterSave(ByVal Success As Boolean)
'Updated by Extendoffice 20220804
Dim xOutApp As Object
Dim xMailItem As Object
Dim xName As String
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xMailItem = xOutApp.CreateItem(0)
xName = ActiveWorkbook.FullName
With xMailItem
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "The workbook has been updated"
.Body = "Hi," & Chr(13) & Chr(13) & "File is now updated."
.Attachments.Add xName
.Display
'.send
End With
Set xMailItem = Nothing
Set xOutApp = Nothing
End Sub Notas: No código,
3. A partir de agora, sempre que guardar o livro ao premir «Ctrl» + «S» ou clicar no botão «Guardar», será automaticamente criada uma mensagem do Outlook. Poderá verificar que o Livro de Trabalho Atual está anexado e que os campos estão preenchidos com o conteúdo especificado. Veja a captura de ecrã:

Dicas: Se utilizar frequentemente este livro, recomendamos que o guarde como «Livro do Excel Ativado para Macros» para preservar o script VBA para utilização futura. Os passos são os seguintes.

3,4 Enviar automaticamente uma mensagem a uma hora específica
Imagine que precisa de enviar, todas as sextas-feiras de manhã às 9h, um email com uma pasta de trabalho de atribuição de tarefas — e quer automatizar esse envio diretamente no Excel, sem precisar de interagir manualmente com o cliente de email. Esta secção mostra-lhe exatamente como o fazer.
1. Prima as teclas «Alt» + «F11» para abrir a janela do Microsoft Visual Basic for Applications.
2. Na janela «Microsoft Visual Basic for Applications», clique em «Inserir» > «Módulo» e, de seguida, cole o seguinte código VBA na janela do módulo.

Código VBA1: Enviar o Livro de Trabalho Atual como anexo a partir do Excel
Sub Timer()
If Weekday(Date) = vbFriday Then
SendWorkBook
Application.OnTime TimeValue("09:00:00"), "Timer"
Else
Application.OnTime TimeValue("09:00:00"), "Timer"
End If
End Sub
Sub SendWorkBook()
'Update by Extendoffice 20220802
Dim OutlookApp As Object
Dim OutlookMail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
On Error Resume Next
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 3. Nesta janela, faça duplo clique em «ThisWorkbook» no painel «Projeto» e cole o seguinte código VBA na janela «ThisWorkbook (Código)».

Código VBA 2: Enviar automaticamente um email a uma hora específica
Private Sub Workbook_Open()
Application.OnTime TimeValue("09:00:00"), "Timer"
End Sub Notas:
4. Guarde os códigos e, de seguida, guarde a pasta de trabalho como uma pasta de trabalho do Excel ativada para macros, conforme indicado em seguida.

5. Abra a sua pasta de trabalho ativada para macros guardada; um e-mail será então criado ou enviado automaticamente no dia e à hora definidos.
4. Tópicos adicionais
Esta secção reúne outros tópicos que poderá encontrar ao enviar e‑mails a partir do Excel.
4,1 Enviar um intervalo de células a partir do Excel (com script VBA)
Suponha que tem uma tabela de vendas mensais numa folha de cálculo do Excel, como ilustrado na imagem seguinte, e que precisa de a enviar a outras pessoas — quer diretamente no corpo de um e-mail, quer como anexo. Apresentamos-lhe aqui dois métodos para o fazer com facilidade.

4,1.1 Enviar um intervalo como parte do conteúdo do corpo do email a partir do Excel
Pode executar o seguinte código VBA para enviar um intervalo de células como parte do conteúdo do corpo do email a partir do Excel
1. Prima as teclas «Alt» + «F11» para abrir a janela do Microsoft Visual Basic for Applications.
2. Na janela «Microsoft Visual Basic for Applications», clique em «Ferramentas» > «Referências». Em seguida, ative a caixa de seleção «Microsoft Outlook 16,0 Object Library» e clique em «OK» na caixa de diálogo «Referências – VBAProject».

3. Clique em «Inserir» > «Módulo» e cole o seguinte código VBA na janela «Módulo (Código)».
Código VBA: Enviar um intervalo de células como parte do conteúdo do corpo do email a partir do Excel
Sub SendARangeofCells()
'Updated by Extendoffice 20220809
Dim xRg As Range
Dim I, J As Long
Dim xAddress As String
Dim xMailOut As Object
Dim xOutApp As Object
On Error Resume Next
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
xAddress = ActiveWindow.RangeSelection.Address
Set xRg = Application.InputBox("Please select range you need to paste into email body", "KuTools For Excel", xAddress, , , , , 8)
If xRg Is Nothing Then Exit Sub
Application.ScreenUpdating = False
Set xOutApp = CreateObject("Outlook.Application")
Set xMailOut = xOutApp.CreateItem(olMailItem)
With xMailOut
.Subject = "test"
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.HTMLBody = RangetoHTML(xRg)
.Display
'.Send
End With
Set xMailOut = Nothing
Set xOutApp = Nothing
Application.ScreenUpdating = True
End Sub
' The following VBA script is cited from this page:
' https://stackoverflow.com/questions/18663127/paste-excel-range-in-outlook
Function RangetoHTML(rng As Range)
' By Ron de Bruin.
Dim fso As Object
Dim ts As Object
Dim TempFile As String
Dim TempWB As Workbook
TempFile = Environ$("temp") & "/" & Format(Now, "dd-mm-yy h-mm-ss") & ".htm"
'Copy the range and create a new workbook to past the data in
rng.Copy
Set TempWB = Workbooks.Add(1)
With TempWB.Sheets(1)
.Cells(1).PasteSpecial Paste:=8
.Cells(1).PasteSpecial xlPasteValues, , False, False
.Cells(1).PasteSpecial xlPasteFormats, , False, False
.Cells(1).Select
Application.CutCopyMode = False
On Error Resume Next
.DrawingObjects.Visible = True
.DrawingObjects.Delete
On Error GoTo 0
End With
'Publish the sheet to a htm file
With TempWB.PublishObjects.Add( _
SourceType:=xlSourceRange, _
Filename:=TempFile, _
Sheet:=TempWB.Sheets(1).Name, _
Source:=TempWB.Sheets(1).UsedRange.Address, _
HtmlType:=xlHtmlStatic)
.Publish (True)
End With
'Read all data from the htm file into RangetoHTML
Set fso = CreateObject("Scripting.FileSystemObject")
Set ts = fso.GetFile(TempFile).OpenAsTextStream(1, -2)
RangetoHTML = ts.ReadAll
ts.Close
RangetoHTML = Replace(RangetoHTML, "align=center x:publishsource=", _
"align=left x:publishsource=")
'Close TempWB
TempWB.Close savechanges:=False
'Delete the htm file we used in this function
Kill TempFile
Set ts = Nothing
Set fso = Nothing
Set TempWB = Nothing
End Function Notas: No código,
4. Prima a tecla «F5» para executar o código. Na caixa de diálogo «Kutools para Excel» que aparece, selecione o intervalo de células que deseja incluir no corpo do e-mail e clique em «OK». Veja a imagem:

Em seguida, será criado automaticamente um e-mail no Outlook. Poderá verificar que o intervalo selecionado na folha de cálculo foi inserido no corpo da mensagem. Veja a imagem:

4,1.2 Enviar um intervalo como anexo a partir do Excel
Se precisar de enviar um intervalo de células de uma folha de cálculo como anexo diretamente do Excel, experimente o seguinte código VBA.
1. Prima as teclas «Alt» + «F11».
2. Na janela «Microsoft Visual Basic for Applications» que se abre, clique em «Inserir» > «Módulo» e, de seguida, cole o seguinte código VBA na janela «Módulo (Código)».
Código VBA: Enviar um intervalo como anexo a partir do Excel
Sub SendRange()
'Update 20220809
Dim xFile As String
Dim xFormat As Long
Dim Wb As Workbook
Dim Wb2 As Workbook
Dim Ws As Worksheet
Dim FilePath As String
Dim FileName As String
Dim OutlookApp As Object
Dim OutlookMail As Object
Dim WorkRng As Range
xTitleId = "KutoolsforExcel"
Set WorkRng = Application.Selection
Set WorkRng = Application.InputBox("Range", xTitleId, WorkRng.Address, Type:=8)
Application.ScreenUpdating = False
Application.DisplayAlerts = False
Set Wb = Application.ActiveWorkbook
Wb.Worksheets.Add
Set Ws = Application.ActiveSheet
WorkRng.Copy Ws.Cells(1, 1)
Ws.Copy
Set Wb2 = Application.ActiveWorkbook
Select Case Wb.FileFormat
Case xlOpenXMLWorkbook:
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
Case xlOpenXMLWorkbookMacroEnabled:
If Wb2.HasVBProject Then
xFile = ".xlsm"
xFormat = xlOpenXMLWorkbookMacroEnabled
Else
xFile = ".xlsx"
xFormat = xlOpenXMLWorkbook
End If
Case Excel8:
xFile = ".xls"
xFormat = Excel8
Case xlExcel12:
xFile = ".xlsb"
xFormat = xlExcel12
End Select
FilePath = Environ$("temp") & "\"
FileName = Wb.Name & Format(Now, "dd-mmm-yy h-mm-ss")
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
Wb2.SaveAs FilePath & FileName & xFile, FileFormat:=xFormat
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email address"
.BCC = "Email address"
.Subject = "Monthly sales for 2021"
.Body = "Hello, please check and read this document. "
.Attachments.Add Wb2.FullName
.Display
'.Send
End With
Wb2.Close
Kill FilePath & FileName & xFile
Set OutlookMail = Nothing
Set OutlookApp = Nothing
Ws.Delete
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub Notas:
3. Prima a tecla «F5» para executar o código. Na caixa de diálogo «Kutools para Excel» que aparece, selecione o intervalo de células que pretende enviar como anexo por e-mail e clique em «OK». Veja a imagem:

Em seguida, será criado automaticamente um e-mail no Outlook. O intervalo de células selecionado na folha de cálculo é guardado como uma pasta de trabalho do Excel e anexado à janela da mensagem. Veja a imagem:

4,2 Enviar emails ao clicar num botão no Excel
Se precisar de clicar num botão de comando para ativar uma macro que envie um e-mail a partir do Excel — por exemplo, enviar o Livro de Trabalho Atual como anexo a outras pessoas ao clicar num botão na folha de cálculo —, siga os passos seguintes para o conseguir.
1. Clique em «Programador» > «Inserir» > «Botão de Comando (Controlo ActiveX)» e, de seguida, desenhe um botão de comando na folha de cálculo.
Dica: Se já tiver um botão de comando, ignore este passo.

2. Prima as teclas «Alt» + «F11» para abrir a janela do «Microsoft Visual Basic for Applications». Na janela que surge, clique em «Inserir» > «Módulo» e cole o código VBA — aquele utilizado para enviar o Livro de Trabalho Atual como anexo diretamente do Excel — na janela «Módulo (Código)».
Clique aqui para obter o código.

Nota: Neste caso, o nome da macro que criou no passo 2 é «SendWorkbook».
3. Prima as teclas «Alt» + «Q» para fechar a janela do Microsoft Visual Basic for Applications.
4. Agora, atribua a macro ao botão de comando: clique com o botão direito do rato no botão e selecione «Ver Código» no menu de contexto.

5. A janela «Microsoft Visual Basic for Applications» abre-se, mostrando as duas linhas seguintes na janela «Folha (Código)».
Private Sub CommandButton1_Click()
End Sub 
6. Introduza o nome da macro existente no procedimento do botão de comando.

7. Prima as teclas «Alt» + «Q» para fechar o «Editor do Visual Basic» e, em seguida, clique em «Programador» > «Modo de Design» para desativar o modo de design.

Agora, basta clicar no botão de comando para enviar um e-mail com o Livro de Trabalho Atual em anexo.
4,3 Enviar emails a partir de uma conta de email específica
Normalmente, ao iniciar um e-mail a partir do Excel com código VBA, o remetente utiliza a conta de e-mail predefinida no Outlook. No entanto, se tiver configurado várias contas no Outlook e pretender usar uma conta específica — em vez da conta predefinida — para enviar e-mails diretamente do Excel, o seguinte código VBA pode ajudá-lo.
Os seguintes códigos são necessários neste caso.
Código VBA 1:
Dim OutlookMail As Outlook.MailItem Código VBA 2:
For Each xAccount In OutlookApp.Session.Accounts
If VBA.LCase(xAccount.SmtpAddress) = VBA.LCase("zxm@addin99.com") Then 'Specify your email account here
OutlookMail.SendUsingAccount = xAccount
End If
Next Como utilizar os códigos VBA apresentados acima?
Neste exemplo, vamos configurar uma conta de e-mail específica para enviar o Livro de Trabalho Atual como anexo diretamente do Excel. Siga os passos abaixo.
1. Prima as teclas «Alt» + «F11». Na janela «Microsoft Visual Basic for Applications», clique em «Ferramentas» > «Referências», marque a caixa «Microsoft Outlook 16,0 Object Library» e, de seguida, clique em «OK» na caixa de diálogo «Referências – VBAProject».

2. Clique em «Inserir» > «Módulo» e, de seguida, cole o seguinte código VBA na janela «Módulo (Código)».
Código VBA: Enviar o Livro de Trabalho Atual como anexo de email a partir do Excel através de uma conta do Outlook específica
Sub SendWorkBook()
'Update by Extendoffice 20220809
Dim OutlookApp As Object
Dim OutlookMail As Outlook.MailItem 'important! Here can’t be declared as Object
Dim xAccount As Account
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(olMailItem)
On Error Resume Next
'The following lines helps to specify a certian email account
For Each xAccount In OutlookApp.Session.Accounts
If VBA.LCase(xAccount.SmtpAddress) = VBA.LCase("zxm@addin99.com") Then 'Specify your email account here
OutlookMail.SendUsingAccount = xAccount
End If
Next
'End
With OutlookMail
.To = "xxx@aaa.com"
.CC = "Email Address"
.BCC = "Email Address"
.Subject = "kte feature"
.Body = "Hello, please check and read this document, thank you."
.Attachments.Add Application.ActiveWorkbook.FullName
.Display
'.Send
End With
Set OutlookMail = Nothing
Set OutlookApp = Nothing
End Sub 3. Prima a tecla «F5» para executar o código. Surge então uma mensagem de e-mail do Outlook, com o campo «De» já preenchido com a conta de e-mail que especificou no código.
4,4 Enviar um email quando uma data for atingida
Se precisar de enviar um e-mail com base numa Data de Vencimento específica — por exemplo, como ilustrado na imagem seguinte, em que existe uma tabela de projetos e, **quando a Data de Vencimento no intervalo E2:E7 for igual ou inferior a 7 dias a contar de hoje** (assumindo que a data atual é 2022/8/4), um e-mail será automaticamente enviado aos respetivos responsáveis dos projetos a informá-los de que o projeto está prestes a expirar.

1. Na folha de cálculo que contém a tabela de projetos, clique com o botão direito do rato no separador da folha e escolha «Ver código» no menu de contexto.

2. Na janela «Microsoft Visual Basic for Applications» que se abre, cole o seguinte código VBA na janela «Folha (Código)».
Código VBA: Enviar automaticamente um email quando uma Data de Vencimento for cumprida
Public Sub SendMailDueDate()
'Updated by Extendoffice 20220804
Dim xRgDate As Range
Dim xRgSend As Range
Dim xRgText As Range
Dim xRgDone As Range
Dim xOutApp As Object
Dim xMailItem As Object
Dim xLastRow As Long
Dim vbCrLf As String
Dim xMailBody As String
Dim xRgDateVal As String
Dim xRgSendVal As String
Dim xMailSubject As String
Dim i As Long
On Error Resume Next
Set xRgDate = Range("E2:E7") 'Please reference the due date column range
If xRgDate Is Nothing Then Exit Sub
Set xRgSend = Range("C2:C7") 'Please reference the email addresses column range
If xRgSend Is Nothing Then Exit Sub
Set xRgText = Range("D2:D7") 'Please reference the remark column range (the remark used to notify project leaders of the expiration of the project)
If xRgText Is Nothing Then Exit Sub
xLastRow = xRgDate.Rows.Count
Set xRgDate = xRgDate(1)
Set xRgSend = xRgSend(1)
Set xRgText = xRgText(1)
Set xOutApp = CreateObject("Outlook.Application")
For i = 1 To xLastRow
xRgDateVal = ""
xRgDateVal = xRgDate.Offset(i - 1).Value
If xRgDateVal <> "" Then
If CDate(xRgDateVal) - Date <= 7 And CDate(xRgDateVal) - Date > 0 Then
xRgSendVal = xRgSend.Offset(i - 1).Value
xMailSubject = xRgText.Offset(i - 1).Value & " on " & xRgDateVal
vbCrLf = "
"
xMailBody = ""
xMailBody = xMailBody & "Dear " & xRgSendVal & vbCrLf
xMailBody = xMailBody & "Remark : " & xRgText.Offset(i - 1).Value & vbCrLf
xMailBody = xMailBody & ""
Set xMailItem = xOutApp.CreateItem(0)
With xMailItem
.Subject = xMailSubject
.To = xRgSendVal
.CC = "Email address"
.BCC = "Email address"
.HTMLBody = xMailBody
.Display
'.Send
End With
Set xMailItem = Nothing
End If
End If
Next
Set xOutApp = Nothing
End Sub Notas: No código,
3. Prima a tecla «F5» para executar o código. Se a data de vencimento cumprir as condições definidas, será criado o e-mail correspondente. Neste caso, serão gerados dois e-mails, tal como ilustrado na imagem seguinte.

5. Uma ferramenta prática para o ajudar a enviar e-mails facilmente a partir do Excel
Se é novo no VBA, os métodos anteriores podem não ser fáceis de aplicar. Por isso, recomendamos a funcionalidade Enviar Emails do «Kutools para Excel», com a qual pode enviar e-mails diretamente do Excel em apenas alguns cliques. Siga estes passos:
5,1 Crie facilmente uma Lista de Emails que inclua os campos de email que necessita
Antes de utilizar a funcionalidade Enviar Emails, é necessário criar uma Lista de Emails que inclua os campos de email pretendidos. A funcionalidade Criar Lista de Correspondência facilita este processo.
1. Clique em «KUTOOLS PLUS» > «Criar Lista de Correspondência».

2. Na janela «Criar Lista de Correspondência» que se abre, configure-a da seguinte forma:

É então criada uma tabela de exemplo denominada Lista de Emails, conforme ilustrado na imagem seguinte.

3. Agora, substitua os dados originais no exemplo pelos seus próprios dados de campos.

Agora que já criou uma tabela Lista de Emails, prossiga e aplique a funcionalidade «Enviar Emails» para enviar mensagens diretamente do Excel com base nos campos que definiu.
Kutools para Excel– Potencie o Excel com mais de 300 ferramentas essenciais, tornando o seu trabalho mais rápido e fácil, e aproveite as funcionalidades de IA para um processamento de dados mais inteligente e uma maior produtividade.Obtenha Já
5,2 Envie facilmente e-mails incluindo os campos que criou na Lista de Emails
Depois de criar a Lista de Emails ()clique para saber como) com os campos de que poderá precisar nos seus e-mails, já pode enviar mensagens diretamente do Excel utilizando esses mesmos campos.
1. Selecione toda a lista de e-mails e clique em «KUTOOLS PLUS» > «Enviar E-mails».

2. Na caixa de diálogo «Enviar E-mails», proceda à seguinte configuração.

3. Em seguida, surge uma caixa de diálogo do «Kutools para Excel» indicando quantos e-mails foram enviados; clique em «OK» para fechá-la.
Sugestão: Aceda à pasta «Itens Enviados» no Outlook para verificar os e-mails enviados.

5,3 Envie facilmente e-mails com corpo em HTML (incluindo hiperligações, imagens, etc.)
Esta funcionalidade Enviar E-mails permite-lhe criar um e-mail em HTML, com hiperligações, imagens, diferentes tamanhos e cores de fonte, entre outros elementos.
Após criar uma lista de e-mails que inclua os campos de e-mail necessários, ao configurar a caixa de diálogo Enviar E-mails, pode enriquecer o conteúdo do corpo com as opções disponíveis na barra de ferramentas.
Veja a imagem abaixo:

5,4 Inserir facilmente a assinatura predefinida do Outlook ao enviar e-mails
No método anterior, mostrámos um código VBA para o ajudar a enviar e-mails com a assinatura predefinida do Outlook. Com a funcionalidade Enviar E-mails, basta ativar uma opção para incluir automaticamente a assinatura predefinida do Outlook nas mensagens enviadas a partir do Excel.
Após criar uma lista de e-mails que inclua os campos de e-mail necessários, clique em **Opções** > **Utilizar definições de assinatura do Outlook** na caixa de diálogo Enviar E-mails.
Nota: Certifique-se de que aparece uma marca de seleção junto à opção «Utilizar definições de assinatura do Outlook».

Quando os destinatários receberem o e-mail, verão a assinatura predefinida do Outlook no final da mensagem.
5,5 Envie facilmente e-mails a partir de uma conta de e-mail específica
Para enviar mensagens diretamente do Excel utilizando uma conta de e-mail específica em vez da conta predefinida, a funcionalidade Enviar E-mails facilita-lhe esta tarefa.
Após criar uma lista de e-mails que inclua os campos de endereço necessários, ao configurar a caixa de diálogo Enviar E-mails, clique em «Opções» > «Enviado de» e selecione a conta de e-mail a partir da qual pretende enviar as mensagens.
Nota: Após selecionar a conta de e-mail, será exibida uma marca de seleção ao lado dela.

Clique aqui para saber mais sobre a funcionalidade Enviar E-mails.
Kutools para Excel– Potencie o Excel com mais de 300 ferramentas essenciais, tornando o seu trabalho mais rápido e fácil, e aproveite as funcionalidades de IA para um processamento de dados mais inteligente e uma maior produtividade.Obtenha Já
Em conclusão, enviar e-mails diretamente do Excel é extremamente útil no dia a dia profissional. Este artigo aborda aspetos mais abrangentes sobre o envio de e-mails a partir do Excel; caso conheça outros tópicos ou soluções mais simples, deixe um comentário para que eu possa saber.
As Melhores Ferramentas de Produtividade para o Office
Potencie as suas competências no Excel com Kutools para Excel e experimente uma eficiência como nunca antes.Kutools para Excel Oferece mais de 300 funcionalidades avançadas para impulsionar a produtividade e Economizar Tempo.Clique aqui para obter a funcionalidade de que mais precisa...
Office Tab Traz uma interface com separadores para o Office e torna o seu trabalho muito mais fácil
- Ative a edição e leitura com separadores no Word, Excel, PowerPoint, Publisher, Access, Visio e Project.
- Abra e crie vários documentos em novos separadores da mesma janela, em vez de em janelas separadas.
- Aumente a sua produtividade em 50 % e elimine centenas de cliques do rato todos os dias!
Todos os suplementos Kutools — num único instalador.
Kutools for Office reúne suplementos para Excel, Word, Outlook e PowerPoint, além do Office Tab Pro, sendo a solução ideal para equipas que trabalham em várias aplicações do Office.
- Pacote tudo-em-um— suplementos para Excel, Word, Outlook e PowerPoint + Office Tab Pro
- Um instalador, uma licença— configuração em minutos (pronto para MSI)
- Funciona melhor em conjunto— produtividade simplificada em todas as aplicações do Office
- Teste gratuito de 30 dias com todas as funcionalidades— sem registo, sem cartão de crédito
- Melhor relação qualidade-preço— poupe face à compra individual dos suplementos