Tutorial de Excel – Enviar correos electrónicos desde Excel
Normalmente, utilizamos clientes de correo electrónico como Outlook, Gmail, etc. para enviar correos electrónicos. Sin embargo, muchas personas almacenan datos en libros de trabajo de Excel y necesitan enviar parte de esos datos a otras personas mientras los están utilizando. Por lo tanto, necesitan enviar correos electrónicos directamente desde el libro de trabajo de Excel, lo que ahorra tiempo al evitar el uso de un cliente de correo. Este tutorial paso a paso te mostrará cómo enviar correos electrónicos desde Excel bajo diferentes condiciones.
Nota: Antes de aplicar los siguientes métodos, necesita configurar un cliente de correo electrónico de Outlook en su computadora y establecerlo como su cliente de correo predeterminado.
Índice: [ Ocultar ]
1. Los conceptos básicos para enviar correos electrónicos desde Excel
Esta sección presenta los conceptos básicos para enviar correos electrónicos desde Excel.
1.1 Enviar correos electrónicos desde Excel con funciones integradas de Excel
Si solo desea enviar correos electrónicos simples desde Excel, incluyendo solo los campos Para, Asunto, Cc y cuerpo, las funciones integradas en Excel pueden ayudar.
1.1.1 Enviar correo electrónico desde Excel utilizando una fórmula
Como se muestra en la tabla a continuación, para enviar diferentes correos electrónicos desde Excel basados en los campos proporcionados, puedes usar las referencias de celda de los campos dados para crear diferentes fórmulas de Hipervínculo y lograrlo. Después de crear los hipervínculos de correo electrónico, puedes hacer clic en el hipervínculo que necesitas para enviar un correo electrónico automáticamente.
Nota: Si hay más de un destinatario en los campos Para o Cc, sepárelos con punto y coma.
Esta sección está dividida en cuatro partes para mostrarle los pasos para agregar la dirección de correo electrónico, el destinatario en copia (Cc), la línea de asunto y el texto del cuerpo por separado a la fórmula de Hipervínculo. Por favor, proceda de la siguiente manera.
La sintaxis y los argumentos de la función "HIPERVÍNCULO" son los siguientes.
Sintaxis
HIPERVÍNCULO(ubicación_del_enlace, [nombre_amigable])
Argumentos
1.1.1.1 Agregar dirección de correo electrónico a la fórmula de Hipervínculo
Aquí usamos "mailto:" como parte de la fórmula para agregar un destinatario de correo electrónico. En este ejemplo, la dirección de correo electrónico del primer destinatario está en la celda B2, por lo que necesitamos añadir "mailto:" y hacer referencia a la celda B2.
“mailto:”&B2
1. Seleccione una celda para mostrar el hipervínculo. En este caso, selecciono la celda F2.
2. Luego, introduce la siguiente fórmula en ella.
=HYPERLINK("mailto:"&B2)
Nota: Si presiona la tecla "Enter", se creará un hipervínculo como se muestra en la captura de pantalla a continuación. Cuando haga clic en el enlace, se creará un correo electrónico de Outlook y la dirección de correo electrónico del destinatario se completará automáticamente en el campo Para.
La dirección de correo electrónico del destinatario ya está agregada a la fórmula de Hipervínculo. Por favor, continúe con los siguientes pasos para añadir la línea de asunto, el destinatario en copia (Cc) y el texto del cuerpo según sea necesario.
1.1.1.2 Agregar destinatario(s) Cc a la fórmula de Hipervínculo
Para agregar el/los destinatario(s) en copia (Cc) a la función de Hipervínculo, por favor añada "?cc=" como parte de la fórmula de la siguiente manera.
La fórmula en la celda F2 debe ser la siguiente:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2)
1.1.1.3 Agregar línea de asunto a la fórmula de Hipervínculo
Para agregar la línea de asunto a la función Hipervínculo, por favor añada "&subject=" como parte de la fórmula de la siguiente manera.
La fórmula en la celda F2 ahora debería verse de la siguiente manera:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2)
1.1.1.4 Agregar texto del cuerpo con saltos de línea a la fórmula de Hipervínculo
El último paso es agregar el texto del cuerpo a la fórmula de Hipervínculo. Como puedes ver en el ejemplo, dos líneas de texto en E2 están separadas por un salto de línea, y deseas mantener el salto de línea en el cuerpo del correo electrónico. ¿Reconoce Outlook el salto de línea en estas circunstancias? Vamos a comprobarlo.
Para agregar el texto del cuerpo a la fórmula de Hipervínculo, necesita añadir “&body=" como parte de la fórmula de la siguiente manera.
La fórmula en la celda F2 ahora se muestra de la siguiente manera:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2)
Nota: Si presiona la tecla "Enter" y hace clic en el enlace, puede ver en el nuevo correo electrónico que el contenido del cuerpo del mensaje se muestra en la misma línea.
Para mostrar el cuerpo del correo electrónico en líneas separadas, necesita modificar el contenido de la celda agregando el código de carácter de retorno de carro "%0A" en el texto donde desee insertar un salto de línea. Vea la captura de pantalla:
1.1.1.5 Especifique el texto que se mostrará para el hipervínculo
En los pasos anteriores, completamos el argumento Link_location con campos de correo electrónico. En esta sección, vamos a completar el siguiente argumento [friendly_name].
En este caso, quiero que la celda del hipervínculo muestre el texto como "Email to xx", donde xx es el nombre del destinatario en A2. Por lo tanto, la fórmula en F2 debe cambiarse a:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2, "Email to "&A2)
Presiona la tecla "Enter" para obtener el resultado.
Selecciona esta celda de fórmula y arrastra su "Controlador de Autocompletar" hacia abajo para crear otros hipervínculos de correo electrónico. Ver captura de pantalla:
1.1.2 Enviar correo electrónico desde Excel con la función Hipervínculo
Además de usar la fórmula de Hipervínculo anterior, puedes crear manualmente un hipervínculo de correo electrónico con la función "Insertar Hipervínculo" en Excel. Esta sección te mostrará los pasos.
1. Haga clic derecho en un correo electrónico donde desee insertar un hipervínculo, seleccione "Vínculo" en el menú contextual.
2. En el cuadro de diálogo "Insertar hipervínculo" que aparece, debe configurarlo de la siguiente manera.

Al hacer clic en el hipervínculo, se creará un correo electrónico de Outlook con los campos Para, Asunto y Cuerpo especificados, tal como se muestra en la captura de pantalla a continuación.
Notas:
1.2 Enviar correo electrónico a varios destinatarios en celdas con script VBA
En el ejemplo anterior, puedes ver que hay varias direcciones de correo electrónico mostradas en una celda, separadas por puntos y coma. Si tienes una lista de direcciones de correo electrónico como se muestra en la captura de pantalla a continuación y deseas enviar un correo o correos independientes a todas ellas, el siguiente código VBA puede ayudarte.
1.2.1 Enviar un correo electrónico a varios destinatarios en celdas con script VBA
1. En la hoja de cálculo que contiene todas las direcciones de correo electrónico a las que desea enviar el correo. Presione las teclas "Alt" + "F11" para abrir la ventana "Microsoft Visual Basic for Applications".
2. En la ventana "Microsoft Visual Basic for Applications", haga clic en "Insertar" > "Módulo", y luego pegue el siguiente código en la ventana "Módulo (Código)".
Código VBA: Enviar correo electrónico a una lista de direcciones 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. Presione la tecla "F5" para ejecutar el código y aparecerá un cuadro de diálogo de "Kutools for 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"
Después de ejecutar el código, todas las direcciones de correo electrónico en el rango seleccionado se muestran en el campo Para de la ventana del mensaje. Ver captura de pantalla:
1.2.2 Enviar correos electrónicos por separado a cada destinatario enumerado en las celdas con un script de VBA
El código anterior añade todas las direcciones de correo electrónico en el rango seleccionado al campo Para de la ventana del mensaje. Si deseas enviar correos electrónicos a cada dirección de correo electrónico listada en las celdas por separado sin que puedan ver las direcciones de los demás, puedes probar el siguiente script VBA.
1. En la hoja de cálculo que contiene todas las direcciones de correo electrónico a las que desea enviar los correos. Presione las teclas "Alt" + "F11" para abrir la "Ventana de Microsoft Visual Basic para Aplicaciones".
2. En la ventana "Microsoft Visual Basic for Applications", haga clic en "Insertar" > "Módulo", y luego pegue el siguiente código en la ventana del Módulo (Código).
Código VBA: Enviar correos electrónicos a cada dirección de correo electrónico enumerada en las celdas por separado
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. Luego, haga clic en "Herramientas" > "Referencias". En el cuadro de diálogo "Referencias – VBAProject", busque y marque la casilla de la "Biblioteca de objetos de Microsoft Outlook 16.0" y luego haga clic en el botón "Aceptar" para guardar los cambios.
4. Presione la tecla "F5" para ejecutar el código y aparecerá un cuadro de diálogo de "Kutools for 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 mensajes de Outlook con una dirección de correo separada listada en el campo Para, como se muestra en la captura de pantalla a continuación.
5. Por último, haga clic en el botón "Enviar" para enviar los correos electrónicos uno por uno.
2. Insertar archivos adjuntos o la firma de Outlook en los correos electrónicos enviados desde Excel (con scripts VBA)
Esta sección te mostrará cómo insertar archivos adjuntos o la firma predeterminada de Outlook en los correos electrónicos enviados desde Excel.
2.1 Insertar archivos adjuntos en los correos electrónicos enviados desde Excel
Aquí describimos los diferentes casos de inserción de archivos adjuntos, y puedes elegir el método según tus necesidades. En esta sección, puedes aprender a (haz clic en cualquiera de los siguientes enlaces para navegar hacia el método correspondiente):
2.1.1 Enviar un archivo específico como adjunto por correo electrónico
Puede aplicar el siguiente código VBA para enviar uno o más archivos en una carpeta como adjuntos desde Excel.
1. Presione las teclas "Alt" + "F11".
2. En la ventana que se abre de "Microsoft Visual Basic for Applications", haga clic en "Insertar" > "Módulo". Luego, pegue el siguiente código VBA en la ventana del Módulo (Código).
Código VBA: Enviar archivos en 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. Luego, haga clic en "Herramientas" > "Referencias". En el cuadro de diálogo "Referencias – VBAProject", busque y marque la casilla de la "Biblioteca de objetos de Microsoft Outlook 16.0" y luego haga clic en el botón "Aceptar" para guardar los cambios.
4. Presione la tecla "F5" para ejecutar el código, luego aparecerá una ventana "Examinar", por favor, seleccione los archivos que necesita adjuntar en el correo electrónico y luego haga clic en "Aceptar".
Luego aparece una ventana de mensaje. Puedes ver que los archivos seleccionados se muestran como adjuntos en el campo Adjuntos.
2.1.2 Enviar la hoja de trabajo actual por correo electrónico como archivo adjunto
Si desea enviar la hoja de cálculo actual como archivo adjunto desde Excel, puede aplicar el script de VBA en esta sección.
1. Presiona las teclas "Alt" + "F11".
2. En la ventana que se abre de "Microsoft Visual Basic for Applications", haga clic en "Insertar" > "Módulo". Luego, pegue el siguiente código VBA en la ventana "Módulo (Código)".
Código VBA: Enviar la hoja de trabajo actual como archivo 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. Presione la tecla "F5" para ejecutar el código, luego la hoja de trabajo actual se guarda como un libro de Excel y se inserta automáticamente en una ventana de mensaje como archivo adjunto. Vea la captura de pantalla:
Nota: El libro adjunto que contiene solo la hoja de trabajo actual tiene el mismo nombre que el libro original. Además, la hora en que ejecutas el código se añade al nombre del libro.
2.1.3 Enviar el libro de trabajo actual como archivo adjunto por correo electrónico
Después de aprender el código VBA para enviar la hoja de trabajo actual como archivo adjunto desde Excel, aquí proporcionamos otro script VBA para ayudarte a enviar todo el libro de trabajo como archivo adjunto. Por favor, sigue los siguientes pasos.
1. Presiona las teclas "Alt" + "F11".
2. En la ventana que se abre de "Microsoft Visual Basic for Applications", haga clic en "Insertar" > "Módulo". Luego, pegue el siguiente código VBA en la ventana del Módulo (Código).
Código VBA: Enviar el libro de trabajo actual como archivo 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. Presione la tecla "F5" para ejecutar el código, luego el libro de trabajo actual se insertará automáticamente en la ventana de mensaje como un archivo adjunto. Vea la captura de pantalla:
2.1.4 Enviar todo el libro de trabajo como archivo adjunto en formato PDF por correo electrónico
Para la mayoría de las personas, suelen guardar un libro de Excel como un archivo PDF y luego enviarlo como adjunto a otros. En esta sección, te mostraré una manera de enviar correos electrónicos directamente desde Excel con el libro de trabajo abierto actual como un archivo adjunto en formato PDF, sin necesidad de guardar manualmente el libro como un archivo PDF.
1. Presiona las teclas "Alt" + "F11".
2. En la ventana que se abre de "Microsoft Visual Basic for Applications", haz clic en "Insertar" > "Módulo". Luego, pega el siguiente código VBA en la ventana del Módulo (Código).
Código VBA: Enviar todo el libro de trabajo como archivo adjunto en formato 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. Presione la tecla "F5" para ejecutar el código. Luego, el libro de trabajo actual se inserta automáticamente en una nueva ventana de mensaje como un archivo adjunto en formato PDF. Vea la captura de pantalla:
2.1.5 Enviar la hoja de trabajo actual por correo electrónico como archivo adjunto en formato PDF
Por ejemplo, hay un libro de trabajo llamado “Ventas mensuales”, y has terminado un informe de ventas en una hoja de cálculo llamada “informe de ventas” y deseas enviar esta hoja como un archivo PDF a tus colegas. El siguiente código VBA puede ayudarte.
1. Presiona las teclas "Alt" + "F11".
2. En la ventana que se abre de "Microsoft Visual Basic for Applications", haga clic en "Insertar" > "Módulo". Luego, pegue el siguiente código VBA en la ventana del Módulo (Código).
Código VBA: Enviar la hoja de trabajo actual como un archivo adjunto en formato 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. Presione la tecla "F5" para ejecutar el código. Luego, la hoja de trabajo actual se inserta automáticamente en una nueva ventana de mensaje como un archivo adjunto en formato PDF. Consulte la captura de pantalla:
2.2 Insertar la firma de Outlook en los correos electrónicos enviados desde Excel
Tomemos el caso anterior como ejemplo: aplicas el código VBA mencionado para enviar la hoja de cálculo actual como un archivo PDF adjunto desde Excel, pero la firma de Outlook no se puede agregar a la ventana del mensaje. Para conservar la firma predeterminada de Outlook en el correo electrónico enviado desde Excel, el siguiente método te ayudará.
A continuación se enumeran dos códigos VBA.
Código VBA 1: El código ayuda a conservar la firma de Outlook.
Código VBA 2: Este código ayuda a enviar la hoja de trabajo actual como un archivo adjunto en formato PDF.
Código VBA 1: Conservar la firma de Outlook
.HTMLBody = "Email body" & "
" & .HTMLBody
Código VBA 2: Enviar la hoja de trabajo actual como un archivo adjunto en formato 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 presionar las teclas "Alt" + "F11" para abrir la ventana "Microsoft Visual Basic for Applications".
2. En la ventana "Microsoft Visual Basic for Applications", haga clic en "Insertar" > "Módulo". Luego, pegue el código VBA 2 anterior en la ventana del Módulo (Código).
3. Para conservar la firma predeterminada de Outlook en el correo electrónico enviado desde Excel, necesita modificar el código VBA 2 de la siguiente manera:
Aquí está el código completo después de 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. Presione la tecla "F5" para ejecutar el código. Luego, obtendrá una nueva ventana de mensaje con la hoja de trabajo actual adjunta como un archivo PDF, mientras que la firma predeterminada de Outlook se insertará automáticamente al final del cuerpo del correo electrónico.
3. Enviar automáticamente correos electrónicos desde Excel cuando se cumple una condición (con scripts de VBA)
En los ejemplos anteriores, es necesario ejecutar el código manualmente para realizar el envío de correos electrónicos. Si deseas activar el código automáticamente cuando se cumpla una determinada condición, como cuando una celda alcanza un valor específico, cuando el valor de una celda cambia, cuando se llega a una fecha determinada, etc., el correo electrónico se enviará de forma automática. Esta sección enumera las condiciones que los usuarios de Excel suelen buscar en Google para ayudarte a enviar correos electrónicos automáticamente desde Excel cuando se cumple 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 a continuación, supongamos que tienes una tabla de ventas con la celda D6 conteniendo el total de ventas. Quieres enviar automáticamente un correo electrónico a tu jefe basado en el total de ventas; por ejemplo, crear o enviar un correo electrónico automáticamente cuando el total de ventas supere 10000, pero si el total de ventas es igual o menor a 10000, no se realiza ninguna acción.
1. En la hoja de cálculo que contiene la tabla de ventas, haga clic derecho en la pestaña de la hoja y seleccione "Ver código" desde el menú contextual.
2. En la ventana que se abre de "Microsoft Visual Basic for Applications", pega el siguiente código VBA en la ventana "Hoja (Código)".
Código VBA: Enviar automáticamente un correo electrónico cuando una celda alcanza 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 en la celda D6 supere 10000, se creará un correo electrónico tal como se muestra en la captura de pantalla a continuación.
3.2 Enviar automáticamente un correo electrónico cuando cambie el valor de una celda
Como se muestra en la captura de pantalla a continuación, supongamos que recibes un libro de trabajo que contiene las ventas mensuales en diferentes hojas de cálculo y el total de ventas en una hoja de cálculo. Necesitas verificar el total de ventas y, si el total de ventas se modifica, devolver el libro de trabajo al remitente e informarle que la celda ha sido modificada.
1. En la hoja de cálculo que contiene la tabla de ventas, haga clic 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 for Applications", pegue el siguiente código VBA en la ventana Hoja (Código).
Código VBA: Enviar automáticamente un correo electrónico cuando cambia 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, cuando el valor en la celda B14 cambie, se creará automáticamente un mensaje de Outlook como se muestra en la captura de pantalla a continuación.
3.3 Enviar automáticamente un correo electrónico cuando se guarda un libro de trabajo
Si tiene un libro de trabajo que necesita ser compartido con otros después de modificarlo, normalmente debe guardar el libro, abrir el cliente de correo electrónico, crear un nuevo correo con este libro adjunto, completar los campos correspondientes y luego enviar el correo. Esta sección le mostrará un método para crear un correo electrónico automáticamente cada vez que guarde el libro de trabajo. Por favor, siga los siguientes pasos.
1. Presione las teclas "Alt" + "F11" para abrir la ventana "Microsoft Visual Basic for Applications".
2. En esta ventana, haga doble clic en "ThisWorkbook" en el panel "Proyecto", luego pegue el siguiente código VBA en la ventana "ThisWorkbook (Código)".
Código VBA: Enviar automáticamente un correo electrónico cuando se guarda un libro de trabajo
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 de trabajo presionando las teclas "Ctrl" + "S" o haciendo clic en el botón "Guardar", se creará automáticamente un correo electrónico de Outlook. Puede ver que el libro de trabajo actual está adjunto como un archivo adjunto y los campos se rellenan con el contenido especificado. Consulte la captura de pantalla:
Consejos: Si utiliza con frecuencia este libro de trabajo, le recomendamos que lo guarde como un "Libro de Excel habilitado para macros" para conservar el script de VBA para uso futuro. Los pasos son los siguientes.
3.4 Enviar automáticamente un correo electrónico a una hora específica
Supongamos que necesitas enviar un correo electrónico con un libro de trabajo de asignación de tareas a alguien "todos los viernes por la mañana a las 9 a.m.", y quieres hacer esto automáticamente en Excel sin tener que operar manualmente el cliente de correo. Esta sección te mostrará el método para lograrlo.
1. Presiona las teclas "Alt" + "F11" para abrir la ventana "Microsoft Visual Basic for Applications".
2. En la ventana "Microsoft Visual Basic for Applications", haga clic en "Insertar" > "Módulo". Luego, 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 "ThisWorkbook" en el panel "Proyecto", luego pegue el siguiente código VBA en la ventana "ThisWorkbook (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 luego guarde el libro de trabajo como un libro de Excel habilitado para macros de la siguiente manera.
5. Abra su libro de trabajo habilitado para macros guardado, luego se creará o enviará automáticamente un correo electrónico cuando llegue el día y la hora.
4. Temas adicionales
Esta sección recopila otros temas que podrías encontrar al enviar correos electrónicos desde Excel.
4.1 Enviar por correo electrónico un rango de celdas desde Excel (con script VBA)
Supongamos que hay una tabla de ventas mensuales en una hoja de cálculo de Excel como se muestra en la captura de pantalla a continuación, y necesitas enviar esta tabla de ventas mensuales a otras personas como contenido del cuerpo de un correo electrónico o como archivo adjunto directamente. Aquí te proporcionamos dos métodos para hacerlo.
4.1.1 Enviar un rango como parte del contenido del cuerpo desde Excel
Puede ejecutar el siguiente código VBA para enviar un rango de celdas como parte del contenido del cuerpo del correo electrónico desde Excel.
1. Presiona las teclas "Alt" + "F11" para abrir la ventana "Microsoft Visual Basic for Applications".
2. En la ventana "Microsoft Visual Basic for Applications", haga clic en "Herramientas" > "Referencias". Luego, marque la casilla de "Microsoft Outlook 16.0 Object Library" y haga clic en "Aceptar" en el cuadro de diálogo "Referencias – VBAProject".
3. Haga clic en "Insertar" > "Módulo", luego 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. Presione la tecla "F5" para ejecutar el código. En el cuadro de diálogo "Kutools for Excel" que aparece, seleccione el rango de celdas que necesita enviar como parte del contenido del cuerpo del correo electrónico, luego haga clic en "Aceptar". Vea la captura de pantalla:
Luego, se creará automáticamente un correo electrónico de Outlook. Puedes ver que el rango que seleccionaste en la hoja de cálculo se inserta en el cuerpo del correo electrónico. Ver captura de pantalla:
4.1.2 Enviar un rango como archivo adjunto desde Excel por correo electrónico
Si necesita enviar por correo electrónico un rango de celdas en una hoja de cálculo como archivo adjunto desde Excel, puede probar el siguiente código VBA.
1. Presione las teclas "Alt" + "F11".
2. En la ventana abierta de "Microsoft Visual Basic for Applications", haga clic en "Insertar" > "Módulo". Luego, 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. Presione la tecla "F5" para ejecutar el código. En el cuadro de diálogo "Kutools for Excel" que aparece, seleccione el rango de celdas que necesita enviar como archivo adjunto en un correo electrónico, luego haga clic en "Aceptar". Vea la captura de pantalla:
Luego, se creará automáticamente un correo electrónico de Outlook. Además, el rango de celdas que seleccionó en la hoja de cálculo se guarda como un libro de Excel y se adjunta en la ventana de Mensaje. Ver captura de pantalla:
4.2 Enviar correos electrónicos cuando se hace 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 haciendo clic en un botón de comando en la hoja de cálculo, puede seguir los pasos a continuación para realizar esta tarea.
1. Haga clic en "Desarrollador" > "Insertar" > "Botón de comando (Control ActiveX)". Luego, dibuje un botón de comando en la hoja de cálculo.
Consejos: Si ya tienes un botón de comando, omite este paso.
2. Presione las teclas "Alt" + "F11" para abrir la ventana "Microsoft Visual Basic for Applications". En la ventana, haga clic en "Insertar" > "Módulo", luego pegue el código VBA (el código utilizado para enviar el libro de trabajo actual como archivo adjunto desde Excel) en la ventana del Módulo (Código).
Haz clic aquí para obtener el código.
Nota: Aquí el nombre de la macro que creó en el paso 2 es "SendWorkbook".
3. Presione las teclas "Alt" + "Q" para cerrar la ventana "Microsoft Visual Basic for Applications".
4. Ahora necesita asignar la macro al botón de comando. Haga clic derecho en el botón de comando, seleccione "Ver código" en el menú contextual.
5. Luego aparecerá la ventana "Microsoft Visual Basic for Applications", donde podrás ver que las siguientes dos líneas están listadas en la ventana "Hoja (Código)".
Private Sub CommandButton1_Click()
End Sub
6. Introduzca el nombre de la macro existente dentro del subprocedimiento para el botón de comando.
7. Presione las teclas "Alt" + "Q" para cerrar el "Editor de Visual Basic", y haga clic en "Desarrollador" > "Modo Diseño" para desactivar el modo diseño.
Ahora puede hacer clic en el botón de comando para enviar un correo electrónico con el libro de trabajo actual como archivo adjunto en el correo.
4.3 Enviar correos electrónicos desde una cuenta de correo especificada
Normalmente, al enviar un correo electrónico desde Excel con código VBA, la cuenta de correo del remitente es la cuenta predeterminada en Outlook. Supongamos que has configurado varias cuentas de correo en tu Outlook y deseas utilizar una cuenta específica para enviar los correos desde Excel en lugar de usar la cuenta predeterminada. El siguiente código VBA puede ayudarte.
Los siguientes códigos son necesarios en este 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
¿Cómo utilizar los códigos VBA anteriores?
En este ejemplo, vamos a especificar una cuenta de correo electrónico determinada para enviar el libro de trabajo actual como un archivo adjunto desde Excel. Por favor, proceda de la siguiente manera.
1. Presione las teclas "Alt" + "F11". En la ventana "Microsoft Visual Basic for Applications", haga clic en "Herramientas" > "Referencias". Luego, marque la casilla de "Microsoft Outlook 16.0 Object Library" y haga clic en "Aceptar" en el cuadro de diálogo "Referencias – VBAProject".
2. Haz clic en "Insertar" > "Módulo". Luego, pega 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 especificada
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. Presione la tecla "F5" para ejecutar el código. Luego, aparecerá un mensaje de correo electrónico de Outlook, y podrá ver que el campo "De" se ha rellenado con la cuenta de correo electrónico que especificó en el código.
4.4 Enviar un correo electrónico cuando se alcance una fecha
Si necesita enviar un correo electrónico basado en una fecha de vencimiento específica, por ejemplo, como se muestra en la captura de pantalla a continuación, hay una tabla de proyectos: "cuando la fecha de vencimiento en el rango E2:E7 es igual o menor a 7 días a partir de hoy (suponiendo que la fecha actual es 2022/8/4)", se enviará automáticamente un correo electrónico a los líderes de proyecto correspondientes y se les notificará que el proyecto está a punto de vencer.
1. En la hoja de cálculo que contiene la tabla del proyecto, haga clic derecho en la pestaña de la hoja y seleccione "Ver código" en el menú contextual.
2. En la ventana que se abre de "Microsoft Visual Basic for Applications", pega el siguiente código VBA en la ventana "Hoja (Código)".
Código VBA: Enviar automáticamente un correo electrónico cuando se cumple una fecha límite
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. Presione la tecla "F5" para ejecutar el código. Luego, si la fecha de vencimiento cumple con las condiciones, se creará el correo electrónico correspondiente. En este caso, se crearán dos correos electrónicos, tal como se muestra en la captura de pantalla a continuación.
5. Una herramienta práctica que te ayuda a enviar correos electrónicos fácilmente desde Excel
Si eres nuevo en VBA, es posible que los métodos anteriores no sean fáciles de manejar para ti. Aquí recomendamos la función "Enviar correos electrónicos" de "Kutools para Excel", con esta función, puedes enviar correos electrónicos desde Excel fácilmente con solo unos pocos clics. Por favor, sigue los siguientes pasos.
5.1 Crea fácilmente una lista de correo que incluya los campos de correo electrónico que necesitas
Antes de aplicar la función Enviar correos electrónicos, necesita crear una lista de correo que contenga los campos de correo electrónico que requiere. Aquí, la función Crear lista de correo puede ayudar.
1. Haga clic en "Kutools Plus" > "Crear lista de correo".
2. En la ventana "Crear lista de correo" que se abre, debe configurar lo siguiente.
Luego, se crea una tabla de ejemplo de lista de correo como se muestra en la captura de pantalla a continuación.
3. Ahora necesita reemplazar los datos originales en la muestra con sus propios datos de campo.
Ahora has creado una tabla de lista de correo. Por favor, procede a aplicar la función "Enviar correos electrónicos" para enviar correos desde Excel basándote en los campos que has creado.
Kutools para Excel - Potencia Excel con más de 300 herramientas esenciales. ¡Disfruta de funciones de IA gratis permanentemente! Consíguelo ahora
5.2 Envía fácilmente correos electrónicos incluyendo los campos que creaste en la lista de correo
Después de crear la lista de correo (haga clic para saber cómo) que contiene los campos que puede necesitar en sus correos electrónicos, ahora puede enviar correos electrónicos desde Excel con estos campos.
1. Seleccione toda la lista de correo, haga clic en "Kutools Plus" > "Enviar correo electrónico".
2. En el cuadro de diálogo "Enviar correo electrónico", por favor, realiza la siguiente configuración.
3. Luego aparece un cuadro de diálogo "Kutools para Excel" que te informa cuántos correos electrónicos se han enviado; haz clic en el botón "Aceptar" para cerrar este cuadro de diálogo.
Consejos: Puede ir a la carpeta "Elementos enviados" en su Outlook para verificar los correos electrónicos que ha enviado.
5.3 Enviar fácilmente correos electrónicos con cuerpo HTML (incluyendo hipervínculos, imágenes, etc.)
Esta función Enviar correos electrónicos te permite crear un correo electrónico en HTML, que incluye hipervínculos, imágenes, diferentes tamaños de fuente y colores de fuente, etc.
Después de crear una lista de correo que incluya los campos de correo electrónico que necesitas, al configurar el cuadro de diálogo Enviar correos electrónicos, puedes enriquecer el contenido del cuerpo utilizando las opciones de la barra de herramientas.
Vea la captura de pantalla a continuación:
5.4 Insertar fácilmente la firma predeterminada de Outlook al enviar correos electrónicos
En el método anterior, mostramos un código VBA para ayudarte a enviar correos electrónicos con la firma predeterminada de Outlook. Aquí, con la función Enviar correos electrónicos, solo necesitas marcar una opción y la firma predeterminada de Outlook se insertará en los correos que envíes desde Excel.
Después de crear una lista de correo que incluya los campos de correo electrónico que necesitas, al configurar el cuadro de diálogo Enviar correos electrónicos, debes hacer clic en "Opciones" > "Usar la configuración de firma de Outlook".
Nota: Asegúrese de que haya una marca de verificación antes de la opción Usar los ajustes de firma de Outlook.
Cuando los destinatarios reciban el correo electrónico, podrán ver la firma predeterminada de Outlook mostrada al final del cuerpo del mensaje.
5.5 Enviar fácilmente correos electrónicos desde una cuenta de correo especificada
Para utilizar una cuenta de correo electrónico específica para enviar los correos desde Excel en lugar de usar la cuenta predeterminada, la función Enviar correos electrónicos también puede ayudarte a hacerlo fácilmente.
Después de crear una lista de correo que incluya los campos de correo electrónico que necesitas, al configurar el cuadro de diálogo Enviar correos electrónicos, debes hacer clic en "Opciones" > "Enviar desde", y luego hacer clic en la cuenta de correo electrónico desde la cual necesitas enviar los correos.
Nota: Después de seleccionar la cuenta de correo electrónico, se mostrará una marca de verificación antes de ella.
Haz clic aquí para saber más sobre la función Enviar correos electrónicos.
Kutools para Excel - Potencia Excel con más de 300 herramientas esenciales. ¡Disfruta de funciones de IA gratis permanentemente! Consíguelo ahora
En conclusión, enviar correos electrónicos desde Excel es bastante útil en nuestro trabajo diario. Este artículo abarca temas más completos sobre el envío de correos electrónicos desde Excel; si hay otros temas o soluciones más sencillas, por favor, deja un comentario para hacérmelo saber.
Las mejores herramientas de productividad para Office
Potencia tus habilidades en Excel con Kutools para Excel y experimenta una eficiencia sin precedentes. Kutools para Excel ofrece más de300 funciones avanzadas para aumentar la productividad y ahorrar tiempo. Haz clic aquí para obtener la función que más necesitas...
Office Tab lleva la interfaz de pestañas a Office y facilita mucho tu trabajo
- Habilita la edición y lectura con pestañas en Word, Excel, PowerPoint, Publisher, Access, Visio y Project.
- Abre y crea varios documentos en nuevas pestañas de la misma ventana, en lugar de nuevas ventanas.
- ¡Aumenta tu productividad en un50% y reduce cientos de clics de ratón cada día!