Macro Excel PDF enviar por correo

Tengo la siguiente macro en Excel en la cual me funciona perfectamente y la función que realiza es la siguiente: Graba el archivo Excel en PDF con el nombre de dos celdas, lo visualiza y lo imprime.

Pero ahora quiero añadirle que me lo permita enviar por correo a través de outlook, que ponga la dirección de correo, asunto y comentario que yo lo indique. Es decir, estos tres datos ya vengan predefinidos. Y lo único que yo tenga que hacer es darle al botón de enviar. Lo he intentado con varias macros que hay en varias páginas o video tutoriales de Youtube y no lo consigo.

La macro es la siguiente:

Sub PDF_PACKING_TARDE()
'
' PDF_PACKING_TARDE Macro
'
Dim nombre As String, Ruta As String, nombre2 As String

Ruta = "L:\PACKING\" 'Se coloca la ruta donde se va a copiar el archivo
nombre = Range("G1").Value 'Se coloca la celda donde esta el nombre para el archivo
nombre2 = Range("Z2").Value 'Se coloca la celda donde esta el segundo nombre para el archivo

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & "\" & nombre & " " & nombre2 & ".pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

ThisWorkbook.ActiveSheet.PrintOut

End Sub

1 Respuesta

Respuesta
2

Te dejo una macro para el envío de adjuntos.

El nombre del archivo será la misma cadena que utilizaste en macro anterior. Si declaras las variables como públicas o colocas estas instrucciones en la misma macro, no será necesario que las vuelvas a declarar.

Sub EnviaCorreo_Adjunto()
Dim myOLApp
Dim myOLItem
Dim olMailItem
Dim miasunto As String, mitexto As String, midire As String
'datos del mail a enviar
midire = ActiveSheet.Range("B5").Value
miasunto = ActiveSheet.Range("B8").Value
mitexto = ActiveSheet.Range("B10").Value
    archivo = Ruta & "\" & nombre & " " & nombre2 & ".pdf"       'cadena con el nombre con que se guardó en macro anterior
'se crea un objeto Outlook, Mail
Set myOLApp = CreateObject("Outlook.Application")
Set myOLItem = myOLApp.CreateItem(olMailItem)
'se establecen los campos del mensaje
With myOLItem
.to = midire                'campo A o Para
.Subject = miasunto         'campo Asunto
.body = mitexto         'cuerpo del mensaje
        .Attachments.Add archivo   'adjuntar archivo
.send               'enviar
End With
'se liberan las variables creadas
Set myOLApp = Nothing: Set myOLItem = Nothing
End Sub

Sdos y no olvides marcar una valoración si el tema queda resuelto.

Elsa

*Te invito a visitar la sección Manuales de mi sitio... acabo de publicar el Manual 500Macros+365 (revisión y actualización completa del manual 500Macros incluyendo código apto para la versión Excel 365 + nuevos capítulos). Imperdible!

Hola, en primer lugar muchísimas gracias por contestar. También disculpa por yo hacerlo ahora, he estado de vacaciones. Te comento, de lenguaje de programación entiendo muy poco, lo siento por mi ignorancia. He copiado y pegado la instrucciones y no consigo que funcione, no se en que me estoy equivocando. Gracias nuevamente.

Quizás no tengas activada todavía la referencia a Outlook.

Desde el Editor, menú Herramientas, Referencias, debes tildar la que te aparezca en Microsoft Outlook. Es posible que tengas otro número.

Y si te llega aparecer un error en la ejecución, debes tomarle imagen y también de la instrucción marcada de amarillo, para que podamos saber cuál es el problema.

Sdos!

Gracias nuevamente por las molestias que te has tomado. Sigo sin poder realizar lo que necesito, he activado la opción de library y pegado las instrucciones, y lo que necesito es lo que ya realiza el que ya tenía hecho y además lo cargue en outlook y yo solo tener que cliquear en envío. Disculpa las molestias que estoy ocasionado.

Veo que dejaste la segunda macro separada. Por lo tanto, las variables declaradas en la primera no deben estar dentro de la macro sino fuera, como primera instrucción para que también acceda a ellas la segunda macro. Y debes llamar al 2do proceso con la instrucción: Call nombre_segunda_macro

Dim nombre As String, Ruta As String, nombre2 As String   'variables para las 2 macros
Sub PDF_PACKING_TARDE()
' PDF_PACKING_TARDE Macro
Ruta = "L:\PACKING\" 'Se coloca la ruta donde se va a copiar el archivo
'--------
'-----------
'----------
Call EnviaCorreoAdjunto      'agregar esta línea para llamar al 2do proceso.
End Sub
Sub EnviaCorreoAdjunto()
'instrucciones
'para el envío
End Sub

También recuerdo que una vez tuve 2 tipos de Outlook.... fijate si en las Referencias, además de Microsoft Outlook te aparece más abajo otra llamada Outlook...... que debieras activar también.

Sdos!

Hola, nuevamente gracias por tomarte la molestia de contestar. Mi intención es hacerlo todo en la misma macro, pero de lenguaje de programación soy totalmente nulo, lo que he conseguido es a través de video tutoriales y buscando información por internet. Intento entender lo que me escribes en las macros y no lo consigo del todo. Sinceramente no quiero molestarte más, no quiero ser un fresco como dicen en mi tierra, jejeje. Muchísimas gracias por las molestias que te has tomado.

Mientras la consulta está abierta (sin ninguna valoración) no me queda otra que seguir respondiendo, jejeje.

Aquí va toda unida. Luego de imprimir, envía un mensaje y luego seguirá el proceso del correo. El mensaje ayuda además, a darle algo de tiempo a que finalice el proceso anterior.

Sub PDF_PACKING_TARDE()
'
' PDF_PACKING_TARDE Macro
'
Dim nombre As String, Ruta As String, nombre2 As String
Ruta = "L:\PACKING\" 'Se coloca la ruta donde se va a copiar el archivo
nombre = Range("G1").Value 'Se coloca la celda donde esta el nombre para el archivo
nombre2 = Range("Z2").Value 'Se coloca la celda donde esta el segundo nombre para el archivo
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & "\" & nombre & " " & nombre2 & ".pdf", Quality:= _
xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
ThisWorkbook.ActiveSheet.PrintOut
'a continuación se enviará por correo
MsgBox "A continuación se enviará el libro por correo.", , "Información"
Dim myOLApp
Dim myOLItem
Dim olMailItem
Dim miasunto As String, mitexto As String, midire As String
'datos del mail a enviar
midire = ActiveSheet.Range("B5").Value
miasunto = ActiveSheet.Range("B8").Value
mitexto = ActiveSheet.Range("B10").Value
    archivo = Ruta & "\" & nombre & " " & nombre2 & ".pdf"       'cadena con el nombre con que se guardó en macro anterior
'se crea un objeto Outlook, Mail
Set myOLApp = CreateObject("Outlook.Application")
Set myOLItem = myOLApp.CreateItem(olMailItem)
'se establecen los campos del mensaje
With myOLItem
.to = midire                'campo A o Para
.Subject = miasunto         'campo Asunto
.body = mitexto         'cuerpo del mensaje
        .Attachments.Add archivo   'adjuntar archivo
.send               'enviar
End With
'se liberan las variables creadas
Set myOLApp = Nothing: Set myOLItem = Nothing
MsgBox "Fin del proceso.", , "Información"
End Sub

Agradeceré no olvides marcar una valoración a mis respuestas. Encontrarás botones para 'Buena' o 'Excelente'. 

Mil millones de gracias, funciona perfectamente, pero te podría pedir una última cosa, por favor. Quisiera que no se enviara automáticamente, sino que se cargara el correo outlook y posteriormente yo cliquear en el botón enviar.
Por cierto me ha gustado mucho este tema: http://aplicaexcel.com/manuales, lo he visto y me parece completo. La próxima semana quiero comprarlo, cuando cobre que estamos a final de mes, jejejeje. Gracias.

Debes reemplazar la línea:

. Send 'enviar

por esta otra:

. Display 'mostrar correo

Sdos!

Sdos.

Elsa

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas