VBA Enviar Emails desde Excel A Través de Outlook
In this Article
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
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.
Añada una referencia a la biblioteca de objetos de Microsoft Outlook para la versión de Office que esté utilizando.
A continuación, puede modificar su código para utilizar directamente estas referencias.
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