Excel Avanzado

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

Excel Avanzado
Logo Excel Avanzado

Enviar libro activo como adjunto en correo

| 8 comentarios

Es muy importante el envió de información se oportuna y sencilla. Un claro ejemplo es el uso de macros para realizar estos procesos que de alguna u otra manera nos parece cotidiano.

Como paso previo se debe incluir la activación de la referencia de objetos Outlook.

Herramientas > Referencias

CELDA1

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

Elegir: Microsoft OutLook (_Version_) Object Library.

celda2

Versión 1.0: Ejecución de macro.

Cabe precisar que tiene algunas condiciones para poder ejecutar la macro que posteriormente se detallara:

- Tener el archivo grabado en la memoria con nombre.

- Tener definido la lista de usuarios a enviar el email.

 

Código VBA:

Sub enviar_adjunto()
'Declarar variables
Dim OLApp As Outlook.Application
Dim OLMail As Object

'Abrir la aplicacion Outlook y crear el email
Set OLApp = New Outlook.Application
Set OLMail = OLApp.CreateItem(0)
OLApp.Session.Logon

'Detallar los elementos del email, a quienes enviar, titulos y archivo a adjuntar
With OLMail
.To = "xxxx@tsi.net.pe; yyyy@gmail.com"
.CC = "zzzz@hotmail.com"
.BCC = ""
.Subject = "Archivo de datos"
.Body = "Buen dia se adjunta archivo de muestra"
.Attachments.Add ActiveWorkbook.FullName
.Display
End With

'Limpiar datos almacenados en las variables definidas
Set OLMail = Nothing
Set OLApp = Nothing
End Sub

Ejecutando el código adjunto muestra la siguiente  imagen.

email1

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

 

Versión 1.2 : Ejecución mediante un Comand Button

Incluir el código en la Hoja activa con el evento seleccionado(en este caso "Click")

email3

El botón se muestra en la hoja adjunta.

email2

Ejecutando el código adjunto muestra la siguiente  imagen.

email1

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

 

Por:  Erik Quispe

8 comentarios

  1. tengo un código que envía correo HTML, y trato de adjuntar una imagen, antes de enviar el correo se visualiza la imagen, pero no llega a los destinatarios. Ayuda

  2. Una pregunta, tengo una base de datos donde tengo varias tablas, las que necesito son piezas y proveedor, necesito enviar un e-mail y la direccion de correo electronico la saco de la tabla proveedor del campo "correo" pero tambien en el correo tengo que adjuntar un archivo PDF pero el archivo esta en la tabla piezas y se llama "imagen", este es mi codigo pero me marca error, podrian ayudarme?
    Private Sub next_Click()

    Dim MyDB As Database
    Dim MyRS As Recordset
    Dim MyRS2 As Recordset
    Dim objOutlook As Outlook.Application
    Dim objOutlookMsg As Outlook.MailItem
    Dim objOutlookRecip As Outlook.Recipient
    Dim objOutlookAttach As Outlook.Attachment
    Dim address As String
    Dim FileName As String
    Dim FilePath As String
    Dim rpthola As String

    FileName = Me.Clave_MY & "Clave_MY"
    FilePath = "I:\Dept\MOE4\Shared4. Información_Administrativa\Documentación\MSE4.1\D. Cahuantzi\reportes\" & FileName & ".pdf"
    DoCmd.OutputTo acOutputReport, "Cpendientes", acFormatPDF, FilePath
    MsgBox "hola"

    Set MyDB = CurrentDb
    Set MyRS = MyDB.OpenRecordset("Proveedores")
    MyRS.MoveFirst

    'Crear sesion Outlook
    Set objOutlook = CreateObject("Outlook.Application")
    Do Until MyRS.EOF
    'Crear el correo
    Set objOutlookMsg = objOutlook.CreateItem(olMailItem)

    ' On Error GoTo Err_next_Click
    If Nz(Me.Proveedor, 0) > 0 Then
    DoCmd.RunCommand acCmdSaveRecord
    DoCmd.OpenReport "NuevaCoti", acViewReport, , , acHidden
    c = DLookup("Correo", "Proveedores", "IdProveedor=" & Me.Proveedor & "")
    ' address = MyRS![Correo]

    With objOutlookMsg
    'agregar para quien es el mensaje "To"
    ' Set objOutlookRecip = .Recipients.Add(address)
    'objOutlookRecip.Type = olTo
    .To = c
    .Subject = "Solicitud de Cotizacion"
    .Body = "Solicito la cotización del listado adjunto, gracias"
    .Attachments.Add FilePath

    'Agregar el archivo adjunto al mensaje
    'Abrir la base donde esta el archivo
    Set MyRS2 = MyDB.OpenRecordset("Piezas")
    MyRS2.MoveFirst
    If Not IsMissing(AttachmentPath) Then
    Set objOutlookAttach = .Attachments.Add(AttachmentPath)
    End If

    End With
    MyRS.MoveNext
    DoCmd.Close acReport, "NuevaCoti", acSaveNo
    Me.OnUnload = ""
    DoCmd.OpenQuery "ActPiezas1"
    DoCmd.Close
    DoCmd.OpenForm "Administrador"
    Else
    msj = MsgBox("ES NECESARIO SELECCIONAR UN PROVEEDOR", vbCritical, "ERROR")
    End If
    Loop
    'Exit_next_Click:
    ' Exit Sub
    '
    'Err_next_Click:
    MsgBox "La cotización no se ha enviado"
    ' Resume Exit_next_Click

    End Sub

  3. Buenas tardes,

    Cuando corro el código me sale el error de compilación: No se ha definido el tipo definido por el usuario.

    Que debo hacer?

    Gracias

  4. Buenas tardes, muchas gracias por la ayuda, solo tengo un problema si solo quiero mandar la hoja activa, como le hago?

  5. Está muy buena la solución, muy directa.

    Mi duda es, si quiero enviar el archivo como un documento PDF, ¿qué modificación sería pertinente?

    Actualmente ya cuento con una Macro que guarda el documento como PDF con un nombre establecido por mí.

    Saludos.

  6. necesto una macro para enviar hoja activa de excel usando gmail

  7. BUENAS TARDES, ME PODRÍAN AYUDAR POR FAVOR PARA AGREGAR UN ARCHIVO EN .PDF EN UNA CELDA DE EXCEL PARA SER ENVIADO POR OUTLOOK Y EL NOMBRE DEL ARCHIVO ES UN REPORTE EL CUAL CAMBIA CON EL NOMBRE DEL LIDER Y FECHA.

  8. Hola al adjuntar el libro activo el nombre me aparece con %20 en los espacios del nombre del archivo, que será? Si me pueden ayudar por favor

Deja una respuesta

Los campos requeridos estan marcados con *.