Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Enviar un rango de celdas como adjunto en correo

| 2 Comments

Cuando se trata de enviar información a través del correo electrónico muchas veces el factor practicidad es fundamental para agilizar el tiempo en el que se concretan conversaciones. Básicamente VBA, como herramienta, nos permite, mediante el uso de macros, seleccionar la data específica dentro de un archivo Excel y, una vez seleccionada dicha data, hacer referencia a otros programas para su utilización; es decir, se puede discriminar la data que se se necesita para poder usarla en otros programas referentes.

En este caso, se utilizará VBA para seleccionar el rango de celdas deseado y enviar la data que se  tiene en él para poder enviarlo adjunto en un correo, que para efectos del programa se utilizará el programa referente Microsoft Outlook.

Es necesario primero, activar en la pestaña referencia la opción del Microsoft Outlook habilitado en ese momento. Para ellos ingresaremos a nuestra interfaz VBA luego a herramientas, referencia y marcamos la versión de Microsoft Outlook, de esta manera:

adadas2

(Para mayor visualización de la imagen, hacer click en la misma)

Una vez habilitada la referencia a Microsoft Outlook, abrimos un módulo en el cual desarrollaremos el código para la macro:

Primero:

– Se declaran las variables necesarias

Dim OLApp As Outlook.Application
Dim OLMail As Object

Nótese que una vez se declaró la referencia, se nos dispone de mayor diversidad de declaraciones, por lo que declaramos nuestras variables, la primera haciendo referencia al programa  y la segunda como el objeto (correo) de dicha aplicación.

Segundo:

– Mediante la macro, se extraerá y copiará la data de un rango de celdas en específico( desde A1 hasta C4), la cual será guardada temporalmente en un dirección de Excel específica para luego ser usada.

Sheets(“Revenue Table”).Range(“A1:C4”).Copy
Workbooks.Add
Range(“A1”).PasteSpecial xlPasteValues
Range(“A1”).PasteSpecial xlPasteFormats
ActiveWorkbook.SaveAs ThisWorkbook.Path & “\TempRangeForEmail.xlsx”

Tercero:

– Es necesario que nosotros tengamos ya nuestros datos registrados en nuestra cuenta de Oulook, ya que se procederá a ordenar que la macro inicie sesión e inmediatamente envíe el mensaje que deseamos, dicha macro tomará la información por defecto registrada en su cuenta de Outlook ( por lo que se le indica que debe estar ya configurado su correo con los datos propios pertinentes)

Set OLApp = New Outlook.Application
Set OLMail = OLApp.CreateItem(0)
OLApp.Session.Logon

Así, se iniciará sesión automáticamente a Outlook, esta macro hará referencia al botón de nuevo mensaje que cualquier mensajería electrónica usa.

Cuarto:

–  Una vez estructurada la ruta macro para la apertura de nuestro Outlook, procedemos a construir el “correo” que enviaremos, donde indicaremos, al dirección a ser enviada, de hecho, si también se realizarán copias de la misma, etc.

With OLMail
.To = “123pucp@outlook.com; info123pucp@pucp.edu.pe”
.CC = “correocopia@pcp.pe”
.BCC = “correocopia2@pcp.pe”
.Subject = “Correo Prueba Macros Excel”
.Body = “Se envía adjunto el rango de celdas solicitado”
.Attachments.Add (ThisWorkbook.Path & “\TempRangeForEmail.xlsx”)
.Display
End With

Como se puede apreciar en el código, hacemos referencia a los destinatarios, tanto los principales como las copias, además el título del mensaje, el cuerpo del correo. Luego, la dirección temporal asignada a nuestra data en el archivo excel solicitado; además existen dos opciones, la opción .display y .send, la primera hará un revisión del correo a enviar, la segunda enviará el correo automáticamente sin hacer una previa revisión del correo.

Quinto:

– Una vez enviado el correo, por razones de seguridad es preciso no dejar los archivos temporales acumulándose sin uso alguno, por lo que una manera práctica de gestionarlos es eliminándolos. Para ello se usa el siguiente código:

ActiveWorkbook.Close  Save Changes = True
Kill ThisWorkbook.Path & “\TempRangeForEmail.xlsx”

Sexto:

– Naturalmente es necesaria la limpieza de la memoria de nuestra macro:

Set OLMail = Nothing
Set OLApp = Nothing

Finalmente nuestra macro puede ser asignada a un botón dinámico o simplemente asignada a un comando de tecla ( sin utilizar) para automatizar nuestro trabajo.

Sub Enviar_rangodeceldas_xcorreo()

Dim OLApp As Outlook.Application
Dim OLMail As Object

Sheets(“Revenue Table”).Range(“A1:C4”).Copy
Workbooks.Add
Range(“A1”).PasteSpecial xlPasteValues
Range(“A1”).PasteSpecial xlPasteFormats
ActiveWorkbook.SaveAs ThisWorkbook.Path & “\TempRangeForEmail.xlsx”

Set OLApp = New Outlook.Application
Set OLMail = OLApp.CreateItem(0)
OLApp.Session.Logon

With OLMail
.To = “123pucp@outlook.com; info123pucp@pucp.edu.pe”
.CC = “correocopia@pcp.pe”
.BCC = “correocopia2@pcp.pe”
.Subject = “Correo Prueba Macros Excel”
.Body = “Se envía adjunto el rango de celdas solicitado”
.Attachments.Add (ThisWorkbook.Path & “\TempRangeForEmail.xlsx”)
.Display
End With

ActiveWorkbook.Close  Save Changes = True
Kill ThisWorkbook.Path & “\TempRangeForEmail.xlsx”

Set OLMail = Nothing
Set OLApp = Nothing

End Sub

De esta manera, se estructuraría nuestra macro para el envío de información específica adjunta a través de un correo electrónico.

Saludos.

Oliver Giancarlo

 

2 Comments

  1. Hola Oliver,
    Tu macro me es de mucha ayuda, pero necesito saber como pudiera hacer que el rango que se envía sea el área de impresión de la hoja y que además pueda enviarse el adjunto como imagen!
    Por favor ayúdame!

  2. usando la opccion de display, hay algun condicion para si despues de haber abierto el email, yo decidiera cerrar el email o cancelarlo, vba me indique que el email no se envio ya sea con un msgbox o en una celda . gracias

Deja un comentario

Required fields are marked *.


Excel Avanzado located at , Lima, Perú . Reviewed by usuarios rated: 4.7 / 5