Excel Avanzado

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

Excel Avanzado
Logo Excel Avanzado

Enviar por correo una hoja como archivo adjunto

| 8 comentarios

Esta macro te permite enviar un hoja de Excel que queramos por correo desde Microsoft Outlook. Para poder ejecutar esta macro es necesario activar la opción de referencia para el Microsoft Outlook. Para hacer esto, abrimos el VB Editor, seleccionamos Herramientas/Referencias y buscamos Biblioteca de Microsoft Outlook y activamos la casilla.

Paso 1: Declaramos dos variables .Para este ejemplo tenemos la Variable OLApp de tipo objeto que se encargará de abrir ejecutar el programa de Outlook. Y la segunda variable, OLMail que almacenará el correo.

Dim OLApp As Outlook.Application
Dim OLMail As Object

Paso 2: Copiamos las hojas que queremos enviar y se guardan en un archivo temporal. Al momento de grabar el nuevo archivo con la hoja, seleccionaremos también la ruta para el archivo.

Sheets("Revenue Table").Copy
ActiveWorkbook.SaveAs ThisWorkbook.Path & "\TempRangeForEmail.xlsx"

Paso 3: Se llama a abrir el Outlook y se abre una ventana de mensaje nuevo:

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

Paso 4: Se llena el correo en blanco con los destinatarios, las copias, las copias ocultas, el asunto y el contenido del mensaje y el archivo adjunto. Para este ultimo, se debe colocar la ruta en donde se encuentra guardado el archivo temporal que se generó anteriormente. Luego de esto se mostrará la ventana de nuevo mensaje con los datos llenados.

With OLMail
.To = "admin@dominio.com; mike@dominio.com"
.CC = ""
.BCC = ""
.Subject = "This is the Subject line"
.Body = "Sample File Attached"
.Attachments.Add (ThisWorkbook.Path & "\TempRangeForEmail.xlsx")
.Display
End With

En este paso, se está terminando con el comando .Display, el permite que se muestre el mensaje que generamos. Sin embargo, también podemos modificar se puede usar el comando .Send para que envíe directamente el correo sin mostrarlo.

Imagen 21

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

Paso 5: Una vez que enviamos el mensaje, debemos proceder a borrar el archivo temporal que generamos en Excel.

ActiveWorkbook.Close SaveChanges:=True
Kill ThisWorkbook.Path & "\TempRangeForEmail.xlsx"

Paso 6: Finalmente, se recomienda dejar las variables libre para evitar algun problema con errores posteriores a la ejecución. Para ello, igualamos las variales a Nothing.

Set OLMail = Nothing
Set OLApp = Nothing

Por: Alonso Rueda

8 comentarios

  1. quisiera saber como enviar una hoja de excel donde guarda informacion de venta cada hora en automático a varios correos

  2. Solo una pequeña corrección al declarar variables para las ultimas versiones del Outlook.

    Set OLApp = CreateObject("Outlook.Application")
    Set OLMail = OLApp.CreateItem(0) 'olMailItem=0

    Sheets("FILL RATE TOTAL").Copy
    ActiveWorkbook.SaveAs ThisWorkbook.Path & "TempRangeForEmail.xlsx"
    OLApp.Session.Logon

    ''''''''

    With OLMail
    .To = "admin@datapigtechnologies.com; mike@datapigtechnologies.com"
    .CC = ""
    .BCC = ""
    .Subject = "This is the Subject line"
    .Body = "Sample File Attached"
    .Attachments.Add (ThisWorkbook.Path & "TempRangeForEmail.xlsx")
    .Display
    End With

    ActiveWorkbook.Close SaveChanges:=True
    Kill ThisWorkbook.Path & "TempRangeForEmail.xlsx"

    Set OLMail = Nothing
    Set OLApp = Nothing

  3. tengo generada una macro que me envia un rango de datos en el cuerpo del mensaje. uso .display en lugar de .send, por si quiero agregar algun comentario.
    el problema surge cuando decido no enviar el mail que genero con .display.
    no encuentro como deshacer o hacer desaparecer el encabezado del email, y volver a la hoja de calculo. agradeceria toda ayuda que me puedan brindar.

  4. hola que tal, yo tengo un formulario en exel una planilla que lleno todos los dias la guardo y luego salgo de exel para que quede vacia nuevamente
    una ves llena nececito que se guarde a pdf y ese mismo enviarlo por email, uso como correo predeterminado Thunderbird.

  5. Excelente!!!!!

  6. Que tal, si quisiera enviar varias hojas del libro que tendría que hacer

  7. porque no llegan los correos que envio de una hoja de excell?
    si lo envio de un archivo excell

  8. Buenas!!! No consigo que el rango se adjunte al correo. Se genera e-mail con la macro pero el rango se me abre en otro libro de Excel nuevo. Yo necesito que se incluya directamente en el correo que sale. Estoy haciendo algo mal? Mil gracias

Deja una respuesta

Los campos requeridos estan marcados con *.