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. Pero muchas personas almacenan datos en libros de Excel y necesitan enviar algunos datos a otros mientras trabajan con ellos. Por lo tanto, necesitan enviar correos electrónicos directamente desde el libro de Excel, lo que ahorra el tiempo de operar un cliente de correo electrónico. Este tutorial paso a paso le mostrará cómo enviar correos electrónicos desde Excel bajo diferentes condiciones.
Note: Antes de aplicar los siguientes métodos, debe configurar un cliente de correo electrónico de Outlook en su computadora y configurarlo como su cliente de correo electrónico predeterminado.
Tabla de contenido: [ Ocultar ]
1. Los conceptos básicos para enviar correos electrónicos desde Excel
Esta sección presenta los aspectos básicos del envío de 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, incluidos solo los campos Para, Asunto, Cc y cuerpo. Las funciones integradas en Excel pueden ayudar.
1.1.1 Enviar correo electrónico desde Excel con una fórmula
Como se muestra en la tabla a continuación, para enviar diferentes correos electrónicos desde Excel en función de los campos dados, puede usar las referencias de celda de los campos dados para crear diferentes fórmulas de hipervínculo para hacerlo. Después de crear los hipervínculos de correo electrónico, puede hacer clic en el hipervínculo que necesita 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 se divide en cuatro partes para mostrarle los pasos para agregar la dirección de correo electrónico, los destinatarios de CC, la línea de asunto y el texto del cuerpo por separado a la fórmula del hipervínculo. Por favor, haga lo siguiente.
La sintaxis y los argumentos del HYPERLINK función son las siguientes.
Sintaxis
HYPERLINK(link_location, [friendly_name])
Argumentos
1.1.1.1 Agregar dirección de correo electrónico a la fórmula de hipervínculo
Aquí usamos "correo a:" 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 debemos agregar "mailto:" y hacer referencia a la celda B2.
“correo a:”&B2
1. Seleccione una celda para mostrar el hipervínculo. En este caso, selecciono la celda F2.
2. Luego ingrese la siguiente fórmula en él.
=HYPERLINK("mailto:"&B2)
Note: Si presiona el Participar clave, se creará un hipervínculo como se muestra en la siguiente captura de pantalla. 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 ahora se agrega a la fórmula Hipervínculo. Continúe con los siguientes pasos para agregar la línea de asunto, los destinatarios de CC y el texto del cuerpo según lo necesite.
1.1.1.2 Agregar destinatario(s) de CC a la fórmula de hipervínculo
Para agregar los destinatarios de CC a la función Hipervínculo, agregue "?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, agregue "&asunto=" como parte de la fórmula de la siguiente manera.
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 Agregar cuerpo de texto con saltos de línea a la fórmula de hipervínculo
El último paso es agregar el cuerpo del texto a la fórmula Hipervínculo. Como puede ver en el ejemplo, dos líneas de texto en E2 están separadas por un salto de línea y desea mantener el salto de línea en el cuerpo del correo electrónico. ¿Reconoce Outlook el salto de línea en esta circunstancia? Vamos a comprobarlo.
Para agregar el cuerpo del texto a la fórmula del hipervínculo, debe agregar “&cuerpo=” 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 pulsa el Participar clave y haga clic en el enlace. Puede ver en el nuevo correo electrónico que el contenido del cuerpo del correo electrónico se muestra en la misma línea.
Para mostrar el cuerpo del correo electrónico en líneas separadas, debe modificar el contenido de la celda agregando el código de carácter de retorno de carro % 0A al texto donde necesita insertar un salto de línea. Ver captura de pantalla:
1.1.1.5 Especificar el texto que se mostrará para el hipervínculo
En los pasos anteriores, terminamos el argumento Ubicación_del_enlace con campos de correo electrónico. Aquí, en esta sección, vamos a terminar el siguiente argumento [nombre_amigable].
En este caso, quiero que la celda del hipervínculo muestre el texto como "Correo electrónico a xx”, donde xx es el nombre del destinatario en A2. Entonces, la fórmula en F2 debe cambiarse a:
=HYPERLINK("mailto:" & B2 & "?cc=" & C2 & "&subject="& D2 & "&body="& E2, "Email to "&A2)
Pulse el botón Participar clave para obtener el resultado.
Seleccione esta celda de fórmula y arrastre su Manija 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
Excepto por el uso de la fórmula de hipervínculo anterior, puede crear manualmente un hipervínculo de correo electrónico con el recuadro hiperenlace función en Excel. Esta sección le mostrará los pasos.
1. Haga clic derecho en un correo electrónico donde desea insertar un hipervínculo, seleccione Enlace desde el menú contextual.
2. En la aparición Insertar hipervínculo cuadro de diálogo, 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, como se muestra en la siguiente captura de pantalla.
Notas:
1.2 Enviar correo electrónico a múltiples destinatarios en celdas con script VBA
En el ejemplo anterior, puede ver que se muestran varias direcciones de correo electrónico en una celda, separadas por punto y coma. Si tiene una lista de direcciones de correo electrónico como se muestra en la captura de pantalla a continuación y desea enviar un correo electrónico o un correo electrónico independiente a todas ellas, el siguiente código de VBA puede hacerle un favor.
1.2.1 Enviar un correo electrónico a múltiples destinatarios en celdas con script VBA
1. En la hoja de trabajo que contiene todas las direcciones de correo electrónico a las que desea enviar el correo electrónico. presione el otro + F11 teclas para abrir el Microsoft Visual Basic para aplicaciones ventana.
2. En el Microsoft Visual Basic para aplicaciones ventana, haga clic recuadro > Módulo, y luego pegue el siguiente código en el Módulo (Código) ventana.
Código de VBA: envíe un 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 el F5 clave para ejecutar el código y una Kutools for Excel aparece el cuadro de diálogo. Seleccione la lista de direcciones de correo electrónico y haga clic en OK.
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 Envíe correos electrónicos por separado a cada destinatario enumerado en celdas con script VBA
El código anterior agrega todas las direcciones de correo electrónico en el rango seleccionado al campo Para de la ventana del mensaje. Si desea enviar correos electrónicos a cada dirección de correo electrónico enumerada en las celdas por separado sin permitir que vean las direcciones de correo electrónico de los demás, puede probar el siguiente script de VBA.
1. En la hoja de trabajo que contiene todas las direcciones de correo electrónico a las que desea enviar los correos electrónicos. presione el otro + F11 claves para abrir la ventana de Microsoft Visual Basic para Aplicaciones.
2. En el Microsoft Visual Basic para aplicaciones ventana, haga clic recuadro > Móduloy luego pegue el siguiente código en la ventana Módulo (Código).
Código de VBA: envíe 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 Herramientas > Referencias. En Referencias - VBAProject cuadro de diálogo, busque y marque el Biblioteca de objetos de Microsoft Outlook 16.0 cuadro y luego haga clic en el OK Para guardar los cambios.
4. presione el F5 clave para ejecutar el código y una Kutools for Excel aparece el cuadro de diálogo. Seleccione la lista de direcciones de correo electrónico y haga clic en DE ACUERDO.
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 direcciones de correo electrónico separadas en el campo Para, como se muestra en la siguiente captura de pantalla.
5. Por fin, haga clic en Enviar botón para enviar el correo electrónico uno por uno.
2. Inserte archivos adjuntos o firma de Outlook en los correos electrónicos enviados desde Excel (con scripts VBA)
Esta sección le 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 puede elegir el método según sus necesidades. En esta sección, puede aprender a (haga clic en cualquiera de los siguientes enlaces para navegar al método correspondiente):
2.1.1 Enviar por correo electrónico un determinado archivo como archivo adjunto
Puede aplicar el siguiente código VBA para enviar por correo electrónico uno o más archivos en una carpeta como archivos adjuntos desde Excel.
1. presione el otro + F11 llaves.
2. En la apertura Microsoft Visual Basic para aplicaciones ventana, haga clic recuadro > Módulo. Luego pegue el siguiente código VBA en la ventana Módulo (Código).
Código de VBA: envíe archivos por correo electrónico en una carpeta como archivos adjuntos de 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 = ""
.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 Herramientas > Referencias. En Referencias - VBAProject cuadro de diálogo, busque y marque el Biblioteca de objetos de Microsoft Outlook 16.0 cuadro y luego haga clic en el OK Para guardar los cambios.
4. presione el F5 clave para ejecutar el código, luego una Explorar aparece una ventana emergente, seleccione los archivos que necesita adjuntar en el correo electrónico y luego haga clic en OK.
Luego aparece una ventana de mensaje. Puede ver que los archivos seleccionados se muestran como archivos adjuntos en el campo Adjunto.
2.1.2 Enviar por correo electrónico la hoja de trabajo actual como archivo adjunto
Si desea enviar por correo electrónico la hoja de trabajo actual como un archivo adjunto desde Excel, puede aplicar el script VBA en esta sección.
1. presione el otro + F11 llaves.
2. En la apertura Microsoft Visual Basic para aplicaciones ventana, haga clic insertar > Módulo. Luego pegue el siguiente código VBA en el Módulo (Código) ventana.
Código de VBA: envíe por correo electrónico la hoja de trabajo actual como un 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 = ""
.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 el F5 para ejecutar el código, la hoja de cálculo actual se guarda como un libro de Excel y se inserta automáticamente en una ventana de mensaje como archivo adjunto. Ver captura de pantalla:
Nota: El libro de trabajo adjunto que contiene solo la hoja de trabajo actual tiene el mismo nombre que el libro de trabajo original. Y la hora en que ejecuta el código también se agrega al nombre del libro.
2.1.3 Enviar por correo electrónico el libro de trabajo actual como archivo adjunto
Después de aprender el código de VBA para enviar por correo electrónico la hoja de trabajo actual como un archivo adjunto desde Excel, aquí proporcionamos otro script de VBA para ayudarlo a enviar por correo electrónico el libro de trabajo completo como un archivo adjunto. Por favor, haga lo siguiente.
1. presione el otro + F11 llaves.
2. En la apertura Microsoft Visual Basic para aplicaciones ventana, haga clic recuadro > Módulo. Luego pegue el siguiente código VBA en la ventana Módulo (Código).
Código de VBA: envíe por correo electrónico el libro de trabajo actual como un 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 = ""
.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 el F5 para ejecutar el código, luego el libro de trabajo actual se inserta en una ventana de mensaje como un archivo adjunto automáticamente. Ver captura de pantalla:
2.1.4 Envíe por correo electrónico el libro de trabajo completo como archivo PDF adjunto
La mayoría de las personas tienden a guardar un libro de Excel como un archivo PDF y luego lo envían como un archivo adjunto a otros. En esta sección, le mostraré una forma de enviar correos electrónicos directamente desde Excel con el libro de trabajo abierto actual como archivo PDF adjunto sin tener que guardar manualmente el libro de trabajo como archivo PDF.
1. presione el otro + F11 llaves.
2. En la apertura Microsoft Visual Basic para aplicaciones ventana, haga clic recuadro > Módulo. Luego pegue el siguiente código VBA en la ventana Módulo (Código).
Código de VBA: envíe por correo electrónico el libro de trabajo completo como un archivo PDF adjunto
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 = ""
.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 el F5 clave para ejecutar el código. Luego, el libro de trabajo actual se inserta automáticamente en una nueva ventana de mensaje como un archivo PDF adjunto. Ver captura de pantalla:
2.1.5 Enviar por correo electrónico la hoja de trabajo actual como archivo PDF adjunto
Por ejemplo, hay un libro de trabajo llamado "Ventas mensuales" y ha terminado una tabla de informe de ventas en una hoja de trabajo llamada "informe de ventas" y desea enviar esta hoja de trabajo como un archivo PDF a sus colegas. El siguiente código de VBA puede hacerte un favor.
1. presione el otro + F11 llaves.
2. En la apertura Microsoft Visual Basic para aplicaciones ventana, haga clic insertar > Módulo. Luego pegue el siguiente código VBA en la ventana Módulo (Código).
Código de VBA: envíe por correo electrónico la hoja de trabajo actual como un archivo PDF adjunto
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 = ""
.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 el F5 clave para ejecutar el código. Luego, la hoja de trabajo actual se inserta automáticamente en una nueva ventana de mensaje como un archivo PDF adjunto. Ver captura de pantalla:
2.2 Insertar la firma de Outlook en los correos electrónicos enviados desde Excel
Tome el caso anterior como ejemplo, aplica el código VBA anterior para enviar la hoja de trabajo 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 ayudará.
Dos códigos de VBA se enumeran a continuación.
Código VBA 1: el código ayuda a conservar la firma de Outlook.
Código VBA 2: el código ayuda a enviar por correo electrónico 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: envíe por correo electrónico la hoja de trabajo actual como un archivo PDF adjunto
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 = ""
.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 el botón otro + F11 teclas para abrir el Microsoft Visual Basic para aplicaciones ventana.
2. En el Microsoft Visual Basic para aplicaciones ventana, haga clic recuadro > Módulo. Luego pegue el código VBA 2 anterior en la ventana Módulo (Código).
3. Para conservar la firma predeterminada de Outlook en el correo electrónico enviado desde Excel, debe 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 = ""
.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 el F5 clave 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. Envíe automáticamente correos electrónicos desde Excel cuando se cumpla una condición (con scripts de VBA)
En los ejemplos anteriores, debe ejecutar el código manualmente para lograr la entrega del correo electrónico. Si desea activar el código automáticamente cuando se cumple una determinada condición, como cuando una celda alcanza un valor determinado, cuando cambia el valor de una celda, cuando se alcanza una fecha, etc., el correo electrónico se enviará automáticamente. Esta sección enumera las condiciones que los usuarios de Excel buscan a menudo en Google para ayudarlo a enviar automáticamente correos electrónicos desde Excel cuando se cumple una determinada condición.
3.1 Enviar automáticamente un correo electrónico cuando una celda alcanza un cierto valor
Como se muestra en la captura de pantalla a continuación, suponga 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, cree o envíe un correo electrónico automáticamente cuando el total de ventas supere 10000, pero si el total de ventas es igual o inferior a 10000, no se realiza ninguna acción.
1. En la hoja de trabajo que contiene la tabla de ventas, haga clic derecho en la pestaña de la hoja y haga clic en Ver código desde el menú contextual.
2. En la apertura Microsoft Visual Basic para aplicaciones ventana, pegue el siguiente código VBA en el Hoja (Código) ventana.
Código VBA: envíe automáticamente un correo electrónico cuando una celda alcance un cierto valor 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 = ""
.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")
De ahora en adelante, cuando el valor en la celda D6 supere los 10000, se creará un correo electrónico como 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 captura de pantalla a continuación, suponga que recibe un libro de trabajo que contiene las ventas mensuales en diferentes hojas de trabajo y el total de ventas en una hoja de trabajo. Debe verificar el total de ventas y, si se modifica el total de ventas, devolver el libro de trabajo al remitente e informarle que la celda se ha modificado.
1. En la hoja de trabajo que contiene la tabla de ventas, haga clic derecho en la pestaña de la hoja y haga clic en Ver código desde el menú contextual.
2. En la apertura Microsoft Visual Basic para aplicaciones ventana, pegue el siguiente código VBA en la ventana Hoja (Código).
Código de VBA: envíe automáticamente un correo electrónico cuando cambie un valor de celda específico
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 = ""
.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,
De ahora en adelante, cuando cambie el valor en la celda B14, se creará automáticamente un mensaje de Outlook como se muestra en la siguiente captura de pantalla.
3.3 Enviar automáticamente un correo electrónico cuando se guarda un libro de trabajo
Si tiene un libro de trabajo que debe compartirse con otros después de modificarlo, normalmente debe guardar el libro de trabajo, iniciar el cliente de correo electrónico, crear un nuevo correo electrónico con este libro de trabajo adjunto, redactar los campos correspondientes y luego enviar el correo electrónico. 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, haga lo siguiente.
1. presione el otro + F11 teclas para abrir el Microsoft Visual Basic para aplicaciones ventana.
2. En esta ventana, haga doble clic ThisWorkbook existentes Proyecto panel, luego pegue el siguiente código VBA en el ThisWorkbook (Código) ventana.
Código de VBA: envíe automáticamente un correo electrónico cuando se guarde 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 = ""
.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. De ahora en adelante, al guardar el libro de trabajo presionando el botón Ctrl + S teclas o haciendo clic en el Guardar botón, se creará automáticamente un correo electrónico de Outlook. Puede ver que el libro de trabajo actual se adjunta como archivo adjunto y los campos se completan con el contenido especificado. Ver captura de pantalla:
Tips: Si utiliza con frecuencia este libro de trabajo, le recomendamos que guarde el libro de trabajo como un Libro de Excel habilitado para macros para guardar el script de VBA para usarlo en el futuro. Los pasos son los siguientes.
3.4 Enviar automáticamente un correo electrónico a una hora específica
Supongamos que necesita 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 amy quiere hacer esto automáticamente en Excel sin tener que operar manualmente el cliente de correo electrónico. Esta sección le mostrará el método para hacerlo.
1. presione el otro + F11 teclas para abrir el Microsoft Visual Basic para aplicaciones ventana.
2. En el Microsoft Visual Basic para aplicaciones ventana, haga clic recuadro > Módulo. Luego pegue el siguiente código VBA en la ventana Módulo.
Código VBA 1: envíe por correo electrónico el libro de trabajo actual como un 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 = ""
.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 ThisWorkbook existentes Proyecto panel, luego pegue el siguiente código VBA en el ThisWorkbook (Código) ventana.
Código VBA 2: envíe automáticamente un correo electrónico en un momento específico
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 trabajo habilitado para macros de Excel de la siguiente manera.
5. Abra su libro de trabajo habilitado para macros guardado, luego se creará o enviará un correo electrónico automáticamente cuando llegue el día y la hora.
4. Temas adicionales
Esta sección recopila otros temas que puede encontrar al enviar correos electrónicos desde Excel.
4.1 Enviar por correo electrónico un rango de celdas de Excel (con secuencia de comandos 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 necesita enviar esta tabla de ventas mensuales a otros como contenido del cuerpo de un correo electrónico o como archivo adjunto directamente. Aquí le proporcionamos dos métodos para hacerlo.
4.1.1 Envíe un rango por correo electrónico como parte del contenido del cuerpo de 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. presione el otro + F11 teclas para abrir el Microsoft Visual Basic para aplicaciones ventana.
2. En el Microsoft Visual Basic para aplicaciones ventana, haga clic Herramientas > Referencias. Y luego revisa el Biblioteca de objetos de Microsoft Outlook 16.0 cuadro y clic OK existentes Referencias - VBAProject caja de diálogo.
3. Hacer clic en recuadro > Módulo, luego pegue el siguiente código VBA en el Módulo (Código) ventana.
Código VBA: envíe 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 = ""
.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 el F5 clave para ejecutar el código. En el emergente Kutools for Excel cuadro de diálogo, seleccione el rango de celdas que necesita enviar como parte del contenido del cuerpo de un correo electrónico, luego haga clic en OK. Ver captura de pantalla:
Luego, se creará automáticamente un correo electrónico de Outlook. Puede ver que el rango que seleccionó en la hoja de trabajo se inserta en el cuerpo del correo electrónico. Ver captura de pantalla:
4.1.2 Enviar por correo electrónico un rango como archivo adjunto desde Excel
Si necesita enviar por correo electrónico un rango de celdas en una hoja de trabajo como un archivo adjunto desde Excel. Puede probar el siguiente código VBA.
1. presione el otro + F11 llaves.
2. En la apertura Microsoft Visual Basic para aplicaciones ventana, haga clic recuadro > Módulo. Luego pegue el siguiente código VBA en el Módulo (Código) ventana.
Código de VBA: envíe un rango por correo electrónico como un 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 = ""
.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 el F5 clave para ejecutar el código. En el emergente Kutools for Excel cuadro de diálogo, seleccione el rango de celdas que necesita enviar como archivo adjunto en un correo electrónico, luego haga clic en OK. Ver captura de pantalla:
Luego, se creará automáticamente un correo electrónico de Outlook. Y el rango de celdas que seleccionó en la hoja de trabajo 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 para enviar un correo electrónico desde Excel, por ejemplo, envíe el libro de trabajo actual como archivo adjunto a otros haciendo clic en un botón de comando en la hoja de trabajo. Puede seguir los pasos a continuación para hacerlo.
1. Hacer clic en Developer > recuadro > Botón de comando (control ActiveX). Luego dibuje un botón de comando en la hoja de trabajo.
Tips: Si ya tiene un botón de comando, omita este paso.
2. presione el otro + F11 teclas para abrir el Microsoft Visual Basic para aplicaciones ventana. En la ventana, haga clic en recuadro > Modo, luego pegue el código VBA (el código utilizado para enviar por correo electrónico el libro de trabajo actual como un archivo adjunto de Excel) en la ventana Módulo (Código).
Haga clic aquí para obtener el código.
Note: Aquí el nombre de la macro que creó en el paso 2 es Enviar libro de trabajo.
3. presione el otro + Q llaves para cerrar el Microsoft Visual Basic para aplicaciones ventana.
4. Ahora necesita asignar la macro al botón de comando. Haga clic derecho en el botón de comando, seleccione Ver código desde el menú del botón derecho.
5. Entonces el Microsoft Visual Basic para aplicaciones aparece una ventana emergente, puede ver que las siguientes dos líneas se enumeran en el Hoja (Código) ventana.
Private Sub CommandButton1_Click()
End Sub
6. Ingrese el nombre de la macro existente dentro del subprocedimiento para el botón de comando.
7. presione el otro + Q llaves para cerrar el Editor de Visual BasicY haga clic en Developer > Modo de diseño para desactivar el modo de 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 electrónico.
4.3 Enviar correos electrónicos desde una cuenta de correo electrónico específica
Normalmente, cuando se inicia un correo electrónico desde Excel con código VBA, la cuenta de correo electrónico del remitente es la cuenta predeterminada en Outlook. Suponga que ha configurado varias cuentas de correo electrónico en su Outlook y desea usar una determinada cuenta para enviar los correos electrónicos desde Excel en lugar de usar la cuenta predeterminada. El siguiente código de VBA puede ayudar.
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("") Then 'Specify your email account here
OutlookMail.SendUsingAccount = xAccount
End If
Next
¿Cómo usar el código VBA anterior?
En este ejemplo, vamos a especificar una determinada cuenta de correo electrónico para enviar el libro de trabajo actual como un archivo adjunto desde Excel. Por favor, haga lo siguiente.
1. presione el otro + F11 llaves. En el Microsoft Visual Basic para aplicaciones ventana, haga clic Herramientas > Referencias. Y luego revisa el Biblioteca de objetos de Microsoft Outlook 16.0 cuadro y clic OK existentes Referencias - VBAProject caja de diálogo.
2. Hacer clic en recuadro > Módulo. Luego pegue el siguiente código VBA en el Módulo (Código) ventana.
Código de VBA: envíe el libro de trabajo actual como un 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("") Then 'Specify your email account here
OutlookMail.SendUsingAccount = xAccount
End If
Next
'End
With OutlookMail
.To = ""
.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 el F5 clave para ejecutar el código. Luego aparece un mensaje de correo electrónico de Outlook, puede ver que el Desde El campo se completa 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 en función de una fecha de vencimiento específica, por ejemplo, como se muestra en la siguiente captura de pantalla, 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 caducar.
1. En la hoja de trabajo que contiene la tabla del proyecto, haga clic derecho en la pestaña de la hoja y haga clic en Ver código desde el menú contextual.
2. En la apertura Microsoft Visual Basic para aplicaciones ventana, pegue el siguiente código VBA en el Hoja (Código) ventana.
Código de VBA: envíe 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. presione el F5 clave para ejecutar el código. Luego, si la fecha de vencimiento coincide con las condiciones, se creará el correo electrónico correspondiente. En este caso, se crearán dos correos electrónicos como se muestra en la siguiente captura de pantalla.
5. Una herramienta útil para ayudarlo a enviar fácilmente correos electrónicos desde Excel
Si es un novato de VBA, es posible que los métodos anteriores no le resulten fáciles de manejar. Aquí te recomendamos Kutools for Excel, Enviar correos electrónicos función, con esta función, puede enviar fácilmente correos electrónicos desde Excel con solo varios clics. Por favor, haga lo siguiente.
Antes de aplicar Kutools for Excel, Por favor descargarlo e instalarlo en primer lugar.
5.1 Cree fácilmente una lista de correo que incluya los campos de correo electrónico que necesita
Antes de aplicar la función Enviar correos electrónicos, debe crear una lista de correo que contenga los campos de correo electrónico que necesita. Aquí la función Crear lista de correo puede ayudar.
1. Hacer clic en Kutools Más > Crear lista de distribución.
2. En la apertura Crear lista de distribución ventana, necesita configurar de la siguiente manera.
Luego, se crea una tabla de lista de correo de muestra 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 ha creado una tabla de lista de correo. Por favor, adelante para aplicar el Enviar correos electrónicos función para enviar correos electrónicos desde Excel en función de los campos que creó.
Si desea tener una prueba gratuita (30 días) de esta utilidad, haga clic para descargarloy luego vaya a aplicar la operación según los pasos anteriores.
5.2 Envíe fácilmente correos electrónicos que incluyan los campos que creó 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 Más > Enviar correos electrónicos.
2. En el Enviar correos electrónicos cuadro de diálogo, por favor haga la siguiente configuración.
3. Entonces un Kutools for Excel aparece un cuadro de diálogo para indicarle cuántos correos electrónicos se envían, haga clic en el OK para cerrar este cuadro de diálogo.
Tips: Puedes ir al Elementos enviados carpeta en su Outlook para revisar los correos electrónicos que envió.
5.3 Envíe fácilmente correos electrónicos con cuerpo HTML (incluidos hipervínculos, imágenes, etc.)
Esta función Enviar correos electrónicos le permite crear un correo electrónico html, que incluye un hipervínculo, una imagen, diferentes tamaños y colores de fuente, etc.
Después crear una lista de correo que incluya los campos de correo electrónico que necesita,
Cuando configurar el cuadro de diálogo Enviar correos electrónicos, puede enriquecer el contenido del cuerpo mediante las opciones de la barra de herramientas.
Vea la captura de pantalla a continuación:
5.4 Inserte fácilmente la firma predeterminada de Outlook al enviar correos electrónicos
En el método anterior, demostramos un código VBA para ayudarlo a enviar correos electrónicos con la firma predeterminada de Outlook. Aquí, con la función Enviar correos electrónicos, solo necesita marcar una opción, luego la firma predeterminada de Outlook se insertará en los correos electrónicos que envió desde Excel.
Después crear una lista de correo que incluya los campos de correo electrónico que necesita,
Cuándo configurar el cuadro de diálogo Enviar correos electrónicos, necesitas hacer clic Opciones > Usar la configuración de la firma de Outlook.
Note: asegúrese de que aparezca una marca de verificación antes de la opción Usar configuración de firma de Outlook.
Cuando los destinatarios reciben el correo electrónico, pueden ver la firma predeterminada de Outlook al final del cuerpo del correo electrónico.
5.5 Envíe fácilmente correos electrónicos desde una cuenta de correo electrónico específica
Para usar una determinada cuenta de correo electrónico para enviar correos electrónicos desde Excel en lugar de usar la cuenta predeterminada, la función Enviar correos electrónicos también puede ayudarlo a hacerlo fácilmente.
Después crear una lista de correo que incluya los campos de correo electrónico que necesita,
Cuándo configurar el cuadro de diálogo Enviar correos electrónicos, necesitas hacer clic Opciones > Enviado desde, luego haga clic en la cuenta de correo electrónico desde la que necesita enviar correos electrónicos.
Note: Después de seleccionar la cuenta de correo electrónico, aparecerá una marca de verificación delante de ella.
Haga Clic en esta página para obtener más información sobre esta función Enviar correos electrónicos.
Si desea tener una prueba gratuita (30 días) de esta utilidad, haga clic para descargarloy luego vaya a aplicar la operación según los pasos anteriores.
En conclusión, enviar correos electrónicos desde Excel es bastante útil en nuestro trabajo diario. Este artículo cubre temas más completos sobre el envío de correos electrónicos desde Excel. Si hay otros temas o soluciones más fáciles, deje un comentario para hacérmelo saber.
Las mejores herramientas de productividad de oficina
Mejore sus habilidades de Excel con Kutools for Excel y experimente la eficiencia como nunca antes. Kutools for Excel ofrece más de 300 funciones avanzadas para aumentar la productividad y ahorrar tiempo. Haga clic aquí para obtener la función que más necesita...
Office Tab lleva la interfaz con pestañas a Office y hace que su trabajo sea mucho más fácil
- Habilite 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 de la misma ventana, en lugar de en nuevas ventanas.
- ¡Aumenta su productividad en un 50% y reduce cientos de clics del mouse todos los días!