VBA Enviar Emails desde Excel A Través de Outlook

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Dennis Madrid

Last updated on diciembre 6, 2022

Este tutorial le mostrará cómo enviar correos electrónicos desde Excel a través de Outlook utilizando VBA.

Enviar el Libro de Trabajo Activo

Function EnviarLibroActivo(strTo As String, strSubject As String, Optional strCC As String, Optional strBody As String) As Boolean
   On Error Resume Next
   Dim appOutlook As Object
   Dim mItem As Object
'crear una nueva instancia de Outlook
   Set appOutlook = CreateObject("Outlook.Application")
   Set mItem = appOutlook.CreateItem(0)
   With mItem
     .To = strTo
     .CC = ""
     .Subject = strSubject
     .Body = strBody
     .Attachments.Add ActiveWorkbook.FullName
'utilice .Send para enviar inmediatamente o .Display para mostrar en pantalla
    .Display 'or .Send
   End With
'limpiar objetos
  Set mItem = Nothing
  Set appOutlook = Nothing
End Function

La función anterior puede ser llamada utilizando el siguiente procedimiento

Sub EnviarMail()
   Dim strTo As String
   Dim strSubject As String
   Dim strBody As String
'rellenar variables
   strTo = "jon.smith@gmail.com"
   strSubject = "Encontrará adjunto el archivo de finanzas"
   strBody = "aquí va el texto del cuerpo del correo electrónico"
'llamar a la función para enviar el email
   If EnviarLibroActivo(strTo, strSubject, , strBody) = True Then
      MsgBox "Email fue creado exitosamente"
   Else
      MsgBox "La creación del Email ha fallado!"
   End If
End Sub

Pantalla de Envío de Emails de Outlook

 

Uso de la Vinculación Temprana para hacer Referencia a la Biblioteca de Objetos de Outlook

El código anterior utiliza Late Binding para hacer referencia al objeto Outlook. Si lo prefiere, puede añadir una referencia a Excel VBA y declarar la aplicación de Outlook y el elemento de correo de Outlook utilizará la vinculación temprana. Early Binding hace que el código se ejecute más rápido, pero te limita ya que el usuario necesitaría tener la misma versión de Microsoft Office en su PC.

Haga clic en el menú Herramientas y Referencias para mostrar el cuadro de diálogo de referencias.

Referencias VBA

 

Añada una referencia a la biblioteca de objetos de Microsoft Outlook para la versión de Office que esté utilizando.

Referencia Microsoft Outlook

 

A continuación, puede modificar su código para utilizar directamente estas referencias.

Envío de Emails con Referencia de Outlook

Una gran ventaja de la vinculación temprana son las listas desplegables que muestran los objetos disponibles

Enviar una Sola Hoja desde el Libro de Trabajo Activo

Para enviar una sola hoja, primero necesita crear un nuevo Libro de Trabajo a partir del libro de trabajo existente con sólo esa hoja en él, y luego enviar esa hoja.

Function EnviarHojaActiva(strTo As String, strSubject As String, Optional strCC As String, Optional strBody As String) As Boolean
   On Error GoTo eh
'declarar variables para contener los objetos necesarios
   Dim wbDestination As Workbook
   Dim strDestName As String
   Dim wbSource As Workbook
   Dim wsSource As Worksheet
   Dim OutApp As Object
   Dim OutMail As Object
   Dim strTempName As String
   Dim strTempPath As String
'crear primero el libro de destino
   Set wbDestination = Workbooks.Add
   strDestName = wbDestination.Name
'establecer el libro y la hoja de origen
   Set wbSource = ActiveWorkbook
   Set wsSource = wbSource.ActiveSheet
'copiar la hoja activa en el nuevo libro
   wsSource.Copy After:=Workbooks(strDestName).Sheets(1)
'guardar con un nombre temporal
   strTempPath = Environ$("temp") & "\"
   strTempName = "Lista obtenida de " & wbSource.Name & ".xlsx"
   With wbDestination
      .SaveAs strTempPath & strTempName
'envíe ahora por correo electrónico el libro de destino
      Set OutApp = CreateObject("Outlook.Application")
      Set OutMail = OutApp.CreateItem(0)
      With OutMail
         .To = strTo
         .Subject = strSubject
         .Body = strBody
         .Attachments.Add wbDestination.FullName
'utilizar .send para enviar inmediatamente o .display para mostrar en pantalla
         .Display 'or .Display
      End With
      .Close False
  End With
'borrar el libro de trabajo temporal que ha adjuntado a su correo
   Kill strTempPath & strTempName
'limpiar los objetos para liberar la memoria
   Set wbDestination = Nothing
   Set wbSource = Nothing
   Set wsSource = Nothing
   Set OutMail = Nothing
   Set OutApp = Nothing
Exit Function
eh:
   MsgBox Err.Description
End Function

y para ejecutar esta función, podemos crear el siguiente procedimiento

Sub EnviarEmail_Hoja()
   Dim strTo As String
   Dim strSubject As String
   Dim strBody As String
   strTo = "jon.smith@gmail.com"
   strSubject = "Se adjunta un archivo sobre finanzas"
   strBody = "aquí va el texto del cuerpo del correo electrónico"
   If EnviarHojaActiva(strTo, strSubject, , strBody) = True Then
      MsgBox "Email creado exitosamente"
   Else
      MsgBox "Creación de Email ha Fallado!"
   End If
End Sub
vba-free-addin

Complemento de Ejemplos de Código de VBA

Acceda fácilmente a todos los ejemplos de código que se encuentran en nuestro sitio.

Simplemente navegue al menú, haga clic y el código se insertará directamente en su módulo. Complemento .xlam.

(¡No se requiere instalación!)

Descarga gratuita

Return to VBA Code Examples