Tutorial de Excel: enviar correos electrónicos desde Excel
Normalmente, utilizamos clientes de correo electrónico como Outlook o Gmail para enviar mensajes. Sin embargo, muchas personas almacenan datos en un libro de Excel y necesitan compartir parte de esa información con otros mientras trabajan en ella. En estos casos, resulta muy útil enviar correos electrónicos directamente desde el libro de Excel, lo que ahorra el tiempo que tomaría usar un cliente de correo externo. Este tutorial paso a paso le mostrará cómo enviar correos electrónicos desde Excel bajo distintas condiciones.
Nota: antes de aplicar los métodos siguientes, debe configurar un cliente de correo Outlook en su equipo y establecerlo como predeterminado.
Tabla de contenidos:[ Ocultar ]
1. Conceptos básicos para enviar correos electrónicos desde Excel
Esta sección presenta los conceptos básicos para enviar correos electrónicos directamente desde Excel.
1,1 Enviar correos electrónicos desde Excel con funciones integradas de Excel
Si solo desea enviar correos electrónicos sencillos desde Excel, con los campos Para, Asunto, Cc y cuerpo, las funciones integradas de Excel le pueden ayudar.
1,1.1 Enviar un correo electrónico desde Excel mediante una fórmula
Como se muestra en la tabla siguiente, para enviar distintos correos electrónicos desde Excel según los campos indicados, puede utilizar referencias de celda de dichos campos y crear fórmulas de hipervínculo específicas. Una vez creados los hipervínculos de correo electrónico, bastará con hacer clic en el que necesite para enviar automáticamente su mensaje.
Nota: si hay más de un destinatario en los campos Para o Cc, sepárelos con punto y coma.

Esta sección se divide en cuatro partes para mostrarle, paso a paso, cómo añadir por separado la dirección de correo electrónico, los destinatarios en Cc, la línea de asunto y el texto del cuerpo a la fórmula de hipervínculo. Siga estos pasos:
La sintaxis y los argumentos de la función «HIPERVÍNCULO» son los siguientes:
Sintaxis
HYPERLINK(link_location, [friendly_name])
Argumentos
1,1.1,1 Añadir Dirección de correo electrónico a la fórmula de hipervínculo
Aquí utilizamos «mailto:» como parte de la fórmula para añadir un destinatario de correo electrónico. En este ejemplo, la dirección de correo electrónico del primer destinatario se encuentra en la celda B2, por lo que debemos incluir «mailto:» seguido de una referencia a dicha celda.
“mailto:”&B2
1. Seleccione la celda en la que desea mostrar el hipervínculo. En este caso, he seleccionado la celda F2.
2. A continuación, introduzca la siguiente fórmula en la celda.
=HYPERLINK("mailto:"&B2) 
Nota: si pulsa la tecla «Entrar», se creará un hipervínculo como el que se muestra en la siguiente captura de pantalla. Al hacer clic en dicho enlace, se abrirá automáticamente un nuevo correo en Outlook con la dirección de correo electrónico del destinatario ya rellenada en el campo Para.

La dirección de correo electrónico del destinatario ya se ha incluido en la fórmula del hipervínculo. Siga los pasos siguientes para añadir, según sus necesidades, la línea de asunto, los destinatarios en Cc y el texto del cuerpo del mensaje.
1,1.1,2 Añadir destinatario(s) en Cc a la fórmula de hipervínculo
Para incluir destinatario(s) en copia (Cc) en la función de hipervínculo, añada «?cc=» en la fórmula tal como se muestra a continuación.
La fórmula en la celda F2 debería ser la siguiente:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2) 
1,1.1,3 Añadir la línea de asunto a la fórmula de hipervínculo
Para incluir la línea de asunto en la función de hipervínculo, añada «&subject=» en la fórmula tal como se muestra a continuación.
La fórmula en la celda F2 ahora debería tener el siguiente aspecto:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2) 
1,1.1,4 Añadir texto del cuerpo con saltos de línea a la fórmula de hipervínculo
El último paso consiste en añadir el texto del cuerpo a la fórmula de hipervínculo. Como puede observar en el ejemplo, las dos líneas de texto en E2 están separadas por un salto de línea, y desea conservar dicho salto en el cuerpo del correo. ¿Reconoce Outlook el salto de línea en esta situación? Vamos a comprobarlo.
Para incluir el texto del cuerpo en la fórmula del hipervínculo, añada «&body=» como parte de la fórmula, tal como se muestra a continuación.
La fórmula en la celda F2 ahora se muestra de la siguiente forma:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2) 
Nota: si pulsa la tecla «Entrar» y hace clic en el enlace, verá en Nuevo Email que el contenido del cuerpo del mensaje aparece en una sola línea.

Para mostrar el cuerpo del correo en líneas separadas, debe modificar el contenido de la celda insertando el código de carácter «%0A» (Retorno de carro) en los puntos donde desee incluir un salto de línea. Vea la captura de pantalla:

1,1.1,5 Especificar el texto que se mostrará para el hipervínculo
En los pasos anteriores, ya completamos el argumento Link_location con los campos del correo electrónico. Ahora, en esta sección, finalizaremos el siguiente argumento: [friendly_name].
En este caso, quiero que la celda del hipervínculo muestre el texto «Correo a xx», donde «xx» es el nombre del destinatario ubicado en A2. Por tanto, la fórmula en F2 debe modificarse a:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2, "Email to "&A2) Pulse la tecla «Entrar» para obtener el resultado.

Seleccione esta celda con la fórmula y arrastre su control de autorrelleno hacia abajo para generar más hipervínculos de correo electrónico. Consulte la captura de pantalla:

1,1.2 Enviar un correo electrónico desde Excel con la función Hipervínculo
Además de usar la fórmula de hipervínculo mencionada anteriormente, puede crear manualmente un hipervínculo de correo electrónico mediante la función «Crear hipervínculo» en Excel. A continuación, le mostramos los pasos.
1. Haga clic con el botón derecho en la celda donde quiera insertar un hipervínculo y elija «Vínculo» en el menú contextual.

2. En el cuadro de diálogo emergente «Crear hipervínculo», configure lo siguiente:

Al hacer clic en el hipervínculo, se abrirá un correo de Outlook con los campos Para, Asunto y Cuerpo ya rellenados, tal como se muestra en la siguiente captura de pantalla.

Notas:
1,2 Enviar correo a varios destinatarios en celdas mediante script VBA
En el ejemplo anterior, puede observar que varias direcciones de correo electrónico aparecen en una celda, separadas por punto y coma. Si dispone de una lista de direcciones de correo electrónico como la que se muestra en la siguiente captura de pantalla y desea enviar un mismo mensaje o correos independientes a todos ellos, el siguiente código VBA le será de gran ayuda.

1,2.1 Enviar un correo a varios destinatarios en celdas mediante script VBA
1. En la hoja de cálculo que contiene todas las direcciones de correo electrónico a las que desea enviar el mensaje, pulse las teclas «Alt» + «F11» para abrir la ventana «Microsoft Visual Basic para Aplicaciones».
2. En la ventana «Microsoft Visual Basic para Aplicaciones», haga clic en «Insertar» > «Módulo» y, a continuación, pegue el siguiente código en la ventana «Módulo (Código)».

Código VBA: enviar correo a una lista de Dirección de correo electrónico
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. Pulse la tecla «F5» para ejecutar el código y aparecerá un cuadro de diálogo de «Kutools para Excel». Seleccione la lista de direcciones de correo electrónico y haga clic en «Aceptar».

Notas:
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel" Tras ejecutar el código, todas las direcciones de correo electrónico del rango seleccionado aparecerán en el campo Para de la ventana del mensaje. Vea la captura de pantalla:

1,2.2 Enviar correos electrónicos por separado a cada destinatario indicado en celdas mediante script VBA
El código anterior añade todas las direcciones de correo electrónico del rango seleccionado al campo «Para» del mensaje. Si desea enviar correos electrónicos a cada destinatario de forma independiente, sin que vean las direcciones de los demás, puede probar el siguiente script de VBA.
1. En la hoja de cálculo que contiene todas las direcciones de correo electrónico a las que desea enviar mensajes, pulse las teclas «Alt» + «F11» para abrir la ventana «Microsoft Visual Basic para Aplicaciones».
2. En la ventana «Microsoft Visual Basic para Aplicaciones», haga clic en «Insertar» > «Módulo» y, a continuación, pegue el siguiente código en la ventana «Módulo (Código)».
Código VBA: enviar correos electrónicos a cada Lista de direcciones de forma independiente
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. A continuación, haga clic en «Herramientas» > «Referencias». En el cuadro de diálogo «Referencias: VBAProject», busque y active la casilla «Microsoft Outlook 16,0 Object Library» y, luego, haga clic en «Aceptar» para guardar los cambios.

4. Pulse la tecla «F5» para ejecutar el código y aparecerá un cuadro de diálogo de «Kutools para Excel». Seleccione la lista de direcciones de correo electrónico y haga clic en «Aceptar».

Notas:
.Subject = "Test"
.Body = "Dear " _
& vbNewLine & vbNewLine & _
"This is a test email " & _
"sending in Excel" En este ejemplo, hay seis direcciones de correo electrónico en el rango seleccionado, por lo que se crearán automáticamente seis ventanas de mensaje de Outlook con distintas listas de direcciones en el campo Para, tal como se muestra en la siguiente captura de pantalla.

5. Por último, haga clic en el botón «Enviar» para enviar los correos electrónicos uno por uno.
2. Insertar un adjunto o la firma de Outlook en los correos electrónicos enviados desde Excel (mediante scripts VBA)
Esta sección le mostrará cómo insertar un archivo adjunto o incluir la firma predeterminada de Outlook en los correos electrónicos enviados desde Excel.
2,1 Insertar adjunto en los correos enviados desde Excel
Aquí describimos los distintos casos de uso de Insertar adjunto, para que elija el método que mejor se adapte a sus necesidades. En esta sección aprenderá a (haga clic en cualquiera de los siguientes enlaces para acceder al método correspondiente):
2,1.1 Enviar un archivo determinado como adjunto
Puede utilizar el siguiente código VBA para enviar por correo electrónico uno o varios archivos de una carpeta como adjuntos directamente desde Excel.
1. Pulse las teclas «Alt» + «F11».
2. En la ventana abierta de «Microsoft Visual Basic para Aplicaciones», haga clic en «Insertar» > «Módulo» y, a continuación, pegue el siguiente código VBA en la ventana del módulo.
Código VBA: Enviar archivos de una carpeta como adjuntos desde 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. A continuación, haga clic en «Herramientas» > «Referencias». En el cuadro de diálogo «Referencias – VBAProject», busque y active la casilla «Microsoft Outlook 16,0 Object Library» y, a continuación, haga clic en «Aceptar» para guardar los cambios.

4. Pulse la tecla «F5» para ejecutar el código; a continuación, aparecerá una ventana «Examinar». Seleccione los archivos que desee adjuntar al correo electrónico y, después, haga clic en «Aceptar».

A continuación, aparecerá una ventana de mensaje en la que podrá ver los archivos seleccionados mostrados como adjuntos en el campo Adjunto.

2,1.2 Enviar el Hoja de trabajo actual como adjunto
Si desea enviar la hoja de trabajo actual como adjunto desde Excel, puede utilizar el script VBA de esta sección.
1. Pulse las teclas «Alt» + «F11».
2. En la ventana abierta de «Microsoft Visual Basic para Aplicaciones», haga clic en «Insertar» > «Módulo» y, a continuación, pegue el siguiente código VBA en la ventana «Módulo (código)».
Código VBA: Enviar el Hoja de trabajo actual como adjunto
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. Pulse la tecla «F5» para ejecutar el código; a continuación, la hoja de trabajo actual se guardará como un libro de Excel y se adjuntará automáticamente en una ventana de mensaje. Vea la captura de pantalla:

Nota: El libro adjunto, que contiene únicamente la hoja de trabajo actual, conserva el mismo nombre que el libro original, al que se le añade también la hora en que se ejecuta el código.
2,1.3 Enviar el Libro de trabajo actual como adjunto
Después de conocer el código VBA para enviar la hoja de trabajo actual como adjunto desde Excel, aquí tiene otro script VBA que le permitirá enviar todo el libro como adjunto. Siga estos pasos.
1. Pulse las teclas «Alt» + «F11».
2. En la ventana abierta de «Microsoft Visual Basic para Aplicaciones», haga clic en **Insertar > Módulo** y, a continuación, pegue el siguiente código VBA en la ventana del módulo (Código).
Código VBA: Enviar el Libro de trabajo actual como adjunto desde 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. Pulse la tecla «F5» para ejecutar el código; a continuación, el libro de trabajo actual se adjuntará automáticamente en la ventana del mensaje. Vea la captura de pantalla:

2,1.4 Enviar todo el libro como adjunto PDF
La mayoría de las personas suelen guardar un libro de Excel como archivo PDF y luego enviarlo como adjunto a otras personas. En esta sección, le mostraré una forma de enviar correos electrónicos directamente desde Excel, adjuntando automáticamente el libro actual como PDF sin necesidad de guardarlo manualmente en ese formato.
1. Pulse las teclas «Alt» + «F11».
2. En la ventana abierta de «Microsoft Visual Basic para Aplicaciones», haga clic en **Insertar > Módulo** y, a continuación, pegue el siguiente código VBA en la ventana del módulo (Código).
Código VBA: Enviar todo el libro como adjunto 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. Pulse la tecla «F5» para ejecutar el código. A continuación, el libro de trabajo actual se insertará automáticamente como archivo PDF adjunto en una nueva ventana de mensaje. Vea la captura de pantalla:

2,1.5 Enviar la Hoja de trabajo actual como adjunto PDF
Por ejemplo, supongamos que tiene un libro llamado «Ventas mensuales» y ha creado una tabla de informe de ventas en una hoja denominada «Informe de ventas». Si desea enviar esta hoja como un archivo PDF a sus compañeros, el siguiente código VBA le será de gran ayuda.
1. Pulse las teclas «Alt» + «F11».
2. En la ventana abierta de «Microsoft Visual Basic para Aplicaciones», haga clic en «Insertar» > «Módulo» y, a continuación, pegue el siguiente código VBA en la ventana del módulo.
Código VBA: Enviar la Hoja de trabajo actual como adjunto 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. Pulse la tecla «F5» para ejecutar el código. A continuación, la hoja de trabajo actual se insertará automáticamente como archivo PDF adjunto en una nueva ventana de mensaje. Vea la captura de pantalla:

2,2 Insertar la firma de Outlook en los correos electrónicos enviados desde Excel
Tomando el caso anterior como ejemplo, al aplicar el código VBA mencionado para enviar la hoja de trabajo actual como archivo PDF adjunto desde Excel, no es posible incluir la firma de Outlook en la ventana del mensaje. Para conservar la firma predeterminada de Outlook en el correo electrónico enviado desde Excel, el siguiente método le será de ayuda.
A continuación, se presentan dos códigos VBA.
Código VBA 1: Este código permite conservar la firma de Outlook.
Código VBA 2: Este código te permite enviar la hoja de trabajo actual como un archivo PDF adjunto.
Código VBA 1: Conservar la firma de Outlook
.HTMLBody = "Email body" & "
" & .HTMLBody Código VBA 2: Enviar el Hoja de trabajo actual como adjunto 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, debe pulsar las teclas «Alt» + «F11» para abrir la ventana de Microsoft Visual Basic para Aplicaciones.
2. En la ventana de «Microsoft Visual Basic para Aplicaciones», haga clic en «Insertar» > «Módulo» y, a continuación, pegue el código VBA anterior 2 en la ventana del módulo.
3. Para conservar la firma predeterminada de Outlook en los correos electrónicos enviados desde Excel, debe modificar el código VBA 2 de la siguiente manera:

Este es el código completo tras la modificación.
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. Pulse la tecla «F5» para ejecutar el código. A continuación, aparecerá una nueva ventana de mensaje con la hoja de trabajo actual adjunta como archivo PDF y la firma predeterminada de Outlook insertada automáticamente al final del cuerpo del mensaje.

3. Envía correos electrónicos automáticamente desde Excel cuando se cumpla una condición (con scripts VBA)
En los ejemplos anteriores, debe ejecutar el código manualmente para enviar el correo electrónico. Si desea que el código se active automáticamente al cumplirse una condición específica —por ejemplo, cuando una celda alcance un valor determinado, cuando cambie el valor de una celda o cuando se llegue a una fecha concreta—, el correo se enviará sin intervención manual. Esta sección recoge las condiciones que los usuarios de Excel suelen buscar en Google para ayudarle a enviar correos electrónicos automáticamente desde Excel en cuanto se cumpla una determinada condición.
3,1 Enviar automáticamente un correo electrónico cuando una celda alcance un valor determinado
Como se muestra en la captura de pantalla siguiente, supongamos que tiene una tabla de ventas con la celda D6 que contiene el total de ventas. Desea enviar automáticamente un correo electrónico a su jefe en función del total de ventas; por ejemplo, crear o enviar un correo automáticamente cuando el total de ventas supere 10000, pero si el total de ventas es igual o inferior a 10000, no se realizará ninguna acción.

1. En la hoja que contiene la tabla de ventas, haga clic con el botón derecho en la pestaña de la hoja y seleccione «Ver código» en el menú contextual.

2. En la ventana abierta de «Microsoft Visual Basic para Aplicaciones», pegue el siguiente código VBA en la ventana «Hoja (código)».

Código VBA: Enviar automáticamente un correo electrónico cuando una celda alcance un valor determinado en 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 ahora, cuando el valor de la celda D6 supere los 10.000, se generará automáticamente un correo electrónico como el que se muestra en la siguiente captura de pantalla.

3,2 Enviar automáticamente un correo electrónico cuando cambie el valor de una celda
Como se muestra en la siguiente captura de pantalla, imagine que recibe un libro que contiene las ventas mensuales distribuidas en distintas hojas y el total de ventas en una hoja aparte. Debe verificar dicho total y, si ha sido modificado, devolver el libro al remitente e informarle de que la celda ha cambiado.

1. En la hoja de cálculo que contiene la tabla de ventas, haga clic con el botón derecho en la pestaña de la hoja y elija «Ver código» en el menú contextual.

2. En la ventana abierta de «Microsoft Visual Basic para Aplicaciones», pegue el siguiente código VBA en la ventana Hoja (código).
Código VBA: Enviar automáticamente un correo electrónico cuando cambie el valor de una celda especificada
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: En el código,
A partir de ahora, cada vez que cambie el valor de la celda B14, se generará automáticamente un mensaje de Outlook, tal como se muestra en la siguiente captura de pantalla.

3,3 Enviar automáticamente un correo electrónico cuando se guarde un libro
Si tiene un libro que necesita compartir con otras personas después de modificarlo, normalmente debe guardar el libro, abrir su cliente de correo electrónico, crear un nuevo mensaje, adjuntar el libro, completar los campos correspondientes y enviarlo. Esta sección le mostrará un método para generar automáticamente un correo cada vez que guarde el libro. Siga estos pasos.
1. Pulse las teclas «Alt» + «F11» para abrir la ventana de Microsoft Visual Basic para Aplicaciones.
2. En esta ventana, haga doble clic en «EsteLibro» en el panel «Proyecto» y, a continuación, pegue el siguiente código VBA en la ventana «EsteLibro (código)».

Código VBA: Enviar automáticamente un correo electrónico cuando se guarde un libro
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: En el código,
3. A partir de ahora, al guardar el libro pulsando «Ctrl» + «S» o haciendo clic en el botón «Guardar», se generará automáticamente un correo de Outlook con el Libro de trabajo actual adjunto y los campos rellenados según lo especificado. Consulte la siguiente captura de pantalla:

Consejo: Si utiliza este libro con frecuencia, le recomendamos guardarlo como «Libro de Excel habilitado para macros» para conservar el script VBA en usos futuros. Los pasos son los siguientes.

3,4 Enviar automáticamente un correo electrónico a una hora específica
Imagínese que necesita enviar un correo electrónico con un libro de trabajo de asignación de tareas a alguien cada viernes por la mañana a las 9:00 y desea automatizarlo en Excel sin tener que intervenir manualmente en su cliente de correo. Esta sección le mostrará cómo lograrlo.
1. Pulse las teclas «Alt» + "F11" para abrir la ventana de Microsoft Visual Basic para Aplicaciones.
2. En la ventana «Microsoft Visual Basic para Aplicaciones», haga clic en «Insertar» > «Módulo» y, a continuación, pegue el siguiente código VBA en la ventana del módulo.

Código VBA 1: Enviar el Libro de trabajo actual como archivo adjunto desde 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. En esta ventana, haga doble clic en «EsteLibro» en el panel «Proyecto» y luego pegue el siguiente código VBA en la ventana «EsteLibro (Código)».

Código VBA 2: Enviar automáticamente un correo electrónico a una hora específica
Private Sub Workbook_Open()
Application.OnTime TimeValue("09:00:00"), "Timer"
End Sub Notas:
4. Guarde los códigos y, a continuación, guarde el libro de trabajo como un libro de Excel habilitado para macros, tal como se indica a continuación.

5. Abra su libro de trabajo habilitado para macros guardado; así, cuando llegue el día y la hora indicados, se creará o enviará automáticamente un correo electrónico.
4. Temas adicionales
Esta sección recopila otros temas que podrías encontrar al enviar correos electrónicos desde Excel.
4,1 Enviar un rango de celdas desde Excel (con script VBA)
Supongamos que tiene una tabla de ventas mensuales en una hoja de cálculo de Excel, como se muestra en la siguiente captura de pantalla, y necesita enviarla a otras personas, ya sea como contenido del cuerpo de un correo electrónico o directamente como archivo adjunto. A continuación, le presentamos dos métodos para lograrlo.

4,1.1 Enviar un rango como parte del contenido del cuerpo del correo desde Excel
Puede ejecutar el siguiente código VBA para enviar un rango de celdas directamente en el cuerpo del correo electrónico desde Excel.
1. Pulse las teclas «Alt» + «F11» para abrir la ventana de Microsoft Visual Basic para Aplicaciones.
2. En la ventana «Microsoft Visual Basic para Aplicaciones», haga clic en «Herramientas» > «Referencias», active la casilla «Biblioteca de objetos de Microsoft Outlook 16,0» y, a continuación, haga clic en «Aceptar» en el cuadro de diálogo «Referencias: VBAProject».

3. Haga clic en «Insertar» > «Módulo» y, a continuación, pegue el siguiente código VBA en la ventana «Módulo (Código)».
Código VBA: Enviar un rango de celdas como parte del contenido del cuerpo del correo electrónico desde 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: En el código,
4. Pulse la tecla «F5» para ejecutar el código. En el cuadro de diálogo emergente «Kutools para Excel», seleccione el rango de celdas que desea incluir en el cuerpo del correo electrónico y, a continuación, haga clic en «Aceptar». Véase la captura de pantalla:

A continuación, se generará automáticamente un correo de Outlook. Podrá comprobar que el rango seleccionado en la hoja de cálculo se ha insertado directamente en el cuerpo del mensaje. Véase la captura de pantalla:

4,1.2 Enviar un rango como archivo adjunto desde Excel
Si necesita enviar un rango de celdas de una hoja de cálculo como archivo adjunto desde Excel, pruebe el siguiente código VBA.
1. Pulse las teclas «Alt» + «F11».
2. En la ventana abierta de «Microsoft Visual Basic para Aplicaciones», haga clic en «Insertar» > «Módulo» y, a continuación, pegue el siguiente código VBA en la ventana «Módulo (Código)».
Código VBA: Enviar un rango como archivo adjunto desde 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. Pulse la tecla «F5» para ejecutar el código. En el cuadro de diálogo emergente «Kutools para Excel», seleccione el rango de celdas que desea enviar como archivo adjunto por correo electrónico y, a continuación, haga clic en «Aceptar». Véase la captura de pantalla:

A continuación, se generará automáticamente un correo de Outlook. El rango de celdas seleccionado en la hoja de cálculo se guardará como un libro de Excel y se adjuntará al mensaje. Véase la captura de pantalla:

4,2 Enviar correos electrónicos al hacer clic en un botón en Excel
Si necesita hacer clic en un botón de comando para activar una macro que envíe un correo electrónico desde Excel —por ejemplo, enviar el libro de trabajo actual como archivo adjunto a otras personas con solo pulsar un botón en la hoja de cálculo—, siga los pasos que se indican a continuación.
1. Haga clic en «Desarrollador» > «Insertar» > «Botón de comando (Control ActiveX)» y, a continuación, dibuje un botón de comando en la hoja de cálculo.
Consejo: Si ya tiene un botón de comando, omita este paso.

2. Pulse las teclas «Alt» + «F11» para abrir la ventana «Microsoft Visual Basic para Aplicaciones». Una vez abierta, haga clic en «Insertar» > «Módulo» y, a continuación, pegue el código VBA —el utilizado para enviar el libro de trabajo actual como archivo adjunto desde Excel— en la ventana «Módulo (Código)».
Haga clic aquí para obtener el código.

Nota: En este caso, el nombre de la macro creada en el paso 2 es «SendWorkbook».
3. Pulse las teclas «Alt» + «Q» para cerrar la ventana de «Microsoft Visual Basic para Aplicaciones».
4. Ahora debe asignar la macro al botón de comando. Haga clic con el botón derecho en el botón y seleccione «Ver código» en el menú contextual.

5. A continuación, se abrirá la ventana «Microsoft Visual Basic para Aplicaciones»; podrá ver que las dos líneas siguientes aparecen en la ventana «Hoja (Código)».
Private Sub CommandButton1_Click()
End Sub 
6. Introduzca el nombre de la macro existente en el procedimiento asignado al botón de comando.

7. Pulse las teclas «Alt» + «Q» para cerrar el «Editor de Visual Basic» y, a continuación, haga clic en «Desarrollador» > «Modo diseño» para desactivar este modo.

Ahora puede hacer clic en el botón de comando para enviar un correo electrónico con el libro de trabajo actual adjunto.
4,3 Enviar correos electrónicos desde una cuenta de correo específica
Normalmente, al crear un correo electrónico desde Excel mediante código VBA, el mensaje se envía desde la cuenta predeterminada de Outlook. Si tiene varias cuentas configuradas en Outlook y desea utilizar una cuenta específica —en lugar de la predeterminada— para enviar correos electrónicos desde Excel, el siguiente código VBA le será de gran ayuda.
En este caso, se requieren los siguientes códigos.
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 ¿Cómo se utilizan los códigos VBA anteriores?
En este ejemplo, especificaremos una cuenta de correo concreta para enviar el libro de trabajo actual como archivo adjunto desde Excel. Siga los pasos que se indican a continuación.
1. Pulse las teclas «Alt» + «F11». En la ventana «Microsoft Visual Basic para Aplicaciones», haga clic en «Herramientas» > «Referencias», active la casilla «Biblioteca de objetos de Microsoft Outlook 16,0» y, a continuación, haga clic en «Aceptar» en el cuadro de diálogo «Referencias: VBAProject».

2. Haga clic en «Insertar» > «Módulo» y, a continuación, pegue el siguiente código VBA en la ventana «Módulo (Código)».
Código VBA: Enviar el Libro de trabajo actual como archivo adjunto de correo electrónico desde Excel a través de una cuenta de 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. Pulse la tecla «F5» para ejecutar el código. A continuación, aparecerá un mensaje de correo de Outlook en el que podrá comprobar que el campo «De» se rellena con la cuenta de correo especificada en el código.
4,4 Enviar un correo electrónico cuando se alcance una fecha
Si necesita enviar un correo electrónico en función de una fecha de vencimiento específica —por ejemplo, como se muestra en la siguiente captura de pantalla, en una tabla de proyectos: «cuando la fecha de vencimiento en el rango E2:E7 sea igual o inferior a 7 días respecto a hoy (suponiendo que la fecha actual sea 4/8/2022)»—, se enviará automáticamente un mensaje a los responsables correspondientes del proyecto para notificarles que está a punto de caducar.

1. En la hoja de cálculo que contiene la tabla de proyectos, haga clic con el botón derecho en la pestaña de la hoja y elija «Ver código» en el menú contextual.

2. En la ventana abierta de «Microsoft Visual Basic para Aplicaciones», pegue el siguiente código VBA en la ventana «Hoja (Código)».
Código VBA: Enviar automáticamente un correo electrónico cuando se cumpla una Fecha de vencimiento
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: En el código,
3. Pulse la tecla «F5» para ejecutar el código. Si la fecha de vencimiento cumple las condiciones, se generará automáticamente el correo electrónico correspondiente. En este caso, se crearán dos correos electrónicos, tal como se muestra en la siguiente captura de pantalla.

5. Una herramienta práctica para facilitarle el envío de correos electrónicos directamente desde Excel
Si es nuevo en VBA, es posible que los métodos anteriores no le resulten sencillos de manejar. Le recomendamos la función Enviar correos electrónicos de «Kutools para Excel». Con ella, podrá enviar correos electrónicos desde Excel con solo unos pocos clics. Siga estos sencillos pasos:
5,1 Cree fácilmente una Lista de correos electrónicos que incluya los campos de correo electrónico que necesite
Antes de utilizar la función Enviar correos electrónicos, debe crear una lista de correo que incluya los campos de dirección de correo electrónico necesarios. Para ello, puede usar la función Crear lista de correo.
1. Haga clic en «KUTOOLS PLUS» > «Crear lista de correo».

2. En la ventana abierta de «Crear lista de correo», deberá configurar lo siguiente.

A continuación, se creará una tabla de ejemplo titulada «Lista de correos electrónicos», tal como se muestra en la siguiente captura de pantalla.

3. Ahora debe reemplazar los datos originales de la plantilla por sus propios datos de campos.

Ahora que ya ha creado una tabla de lista de correos electrónicos, continúe aplicando la función «Enviar correos electrónicos» para enviar mensajes desde Excel según los campos que ha configurado.
Kutools para Excel: potencie Excel con más de 300 herramientas esenciales, agilice y simplifique su trabajo, y aproveche las funciones de IA para un procesamiento de datos más inteligente y una mayor productividad.Consígalo ahora
5,2 Envíe fácilmente correos electrónicos incluyendo los campos que creó en el Lista de correos electrónicos
Después de crear la lista de correos electrónicos ()haga clic para saber cómo) con los campos que puede necesitar en sus mensajes, ya puede enviar correos desde Excel utilizando estos datos.
1. Seleccione toda la lista de correos electrónicos y haga clic en «Kutools Plus» > «Enviar correos electrónicos».

2. En el cuadro de diálogo «Enviar correos electrónicos», realice la siguiente configuración.

3. A continuación, aparecerá un cuadro de diálogo de «Kutools para Excel» indicándole cuántos correos se han enviado; haga clic en «Aceptar» para cerrarlo.
Consejo: Puede consultar los correos enviados accediendo a la carpeta «Elementos enviados» de su Outlook.

5,3 Envíe fácilmente correos electrónicos con cuerpo HTML (incluyendo hipervínculos, imágenes, etc.)
Esta función de enviar correos electrónicos le permite crear un correo en HTML que incluye hipervínculos, imágenes, distintos tamaños y colores de fuente, entre otros elementos.
Después de crear una lista de correos electrónicos que incluya los campos de correo que necesita, cuando configure el cuadro de diálogo Enviar correos electrónicos, podrá enriquecer el contenido del cuerpo utilizando las opciones de la barra de herramientas.
Vea la captura de pantalla siguiente:

5,4 Inserte fácilmente la firma predeterminada de Outlook al enviar correos electrónicos
En el método anterior, mostramos un código VBA que le ayuda a enviar correos con la firma predeterminada de Outlook. Con la función Enviar correos electrónicos, basta con marcar una opción para que la firma predeterminada de Outlook se inserte automáticamente en los mensajes que envíe desde Excel.
Después de crear una lista de correos electrónicos que incluya los campos de correo que necesita, al configurar el cuadro de diálogo Enviar correos electrónicos, haga clic en **Opciones > Usar la configuración de firma de Outlook**.
Nota: Asegúrese de que aparezca una marca de verificación junto a la opción «Usar la configuración de firma de Outlook».

Cuando los destinatarios reciban el correo, verán la firma predeterminada de Outlook al final del cuerpo del mensaje.
5,5 Envíe fácilmente correos electrónicos desde una cuenta de correo específica
La función Enviar correos electrónicos le permite utilizar fácilmente una cuenta de correo específica para enviar mensajes desde Excel, en lugar de la cuenta predeterminada.
Después de crear una lista de correos electrónicos que incluya los campos de correo que necesita, al configurar el cuadro de diálogo Enviar correos electrónicos, haga clic en «Opciones» > «Enviar desde» y seleccione la cuenta de correo desde la que desea enviar los mensajes.
Nota: Tras seleccionar la cuenta de correo, aparecerá una marca de verificación junto a ella.

Haga clic aquí para obtener más información sobre la función Enviar correos electrónicos.
Kutools para Excel: potencie Excel con más de 300 herramientas esenciales, agilice y simplifique su trabajo, y aproveche las funciones de IA para un procesamiento de datos más inteligente y una mayor productividad.Consígalo ahora
En conclusión, enviar correos electrónicos desde Excel resulta muy útil en nuestro trabajo diario. Este artículo aborda aspectos más completos sobre el envío de correos desde Excel; si conoce otros enfoques o soluciones más sencillas, ¡deje un comentario para compartírmelo!
Las mejores herramientas de productividad para Office
Potencie sus habilidades en Excel con Kutools para Excel y experimente una eficiencia como nunca antes.Kutools para Excel ofrece más de 300 funciones avanzadas para aumentar su productividad y Ahorrar tiempo.Haga clic aquí para obtener la función que más necesita...
Office Tab aporta una interfaz con pestañas a Office y hace que su trabajo sea mucho más fácil
- Active la edición y lectura con pestañas en Word, Excel, PowerPoint, Publisher, Access, Visio y Project.
- Abra y cree varios documentos en nuevas pestañas dentro de la misma ventana, en lugar de hacerlo en ventanas separadas.
- ¡Aumente su productividad en un 50 % y elimine cientos de clics del ratón cada día!
Todos los complementos de Kutools en un solo instalador.
Kutools for Office es la suite que incluye complementos para Excel, Word, Outlook y PowerPoint, además de Office Tab Pro, ideal para equipos que trabajan en distintas aplicaciones de Office.
- Suite integral— complementos para Excel, Word, Outlook y PowerPoint + Office Tab Pro
- Un instalador, una licencia— configuración en minutos (compatible con MSI)
- Rendimiento mejorado en conjunto— productividad optimizada en todas las aplicaciones de Office
- Prueba gratuita de 30 días con todas las funciones— sin registro ni tarjeta de crédito
- La mejor relación calidad-precio— ahorre frente a la compra individual de complementos