Macro excel para exportar a pdf con nombre y ruta definidas a pc y adjuntarlo el email junto con texto en asunto y cuerpo.

Me permito saludarte desde España, viendo tu experturia en temas de macros excel te solicito ayuda para un problema de guardar una hoja de excel en pdf y adjuntarla (si fuera posible en un email como adjunto en pdf, junto a un texto en el asunto y otro comentario en el cuerpo del correo electrónico).

Sub SavePDFMacro2()
nombre = Cells(1, 20).Value
ruta = Cells(2, 20).Value
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    ruta & nombre, Quality:= _
    xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
    OpenAfterPublish:=True
End Sub

Por ahora tengo esta macro, pero me da el error '5': "Se ha producido el error '5' en tiempo de ejecución: Argumento o llamada a procedimiento no válida". En el momento que le doy a depurar me aparece seleccionado el texto que marco en negrita:

Respuesta
1

Yo tengo una macro que me va bien para lo que tu necesitas.

A mi me funciona y si cambias las líneas a tus necesidades... te irá bien para exportar a PDF y para imprimir ese archivo PDF creado.

Lo de adjuntarlo al mail... me viene grande así que te adjunto mi macro y espero que te sirva, así por lo menos, tienes media respuesta solucionada.

Un saludo Amigo

Macro: (Modifica las líneas a tus necesidades)

Sub Exportar_a_PDF_e_Imprimir()
'
' by Juanjo Benítez
'
Dim NombreArchivo As String
Dim RangoEscogido As Range
Dim pregunta1 As Integer
Dim pregunta2 As Integer
Dim pregunta2a As Integer

' Usar solo una de las dos lineas siguientes
NombreArchivo = "C:\Facturacion\Base Datos Clientes\Facturas" ' si deseas que se grabe en una ruta especifica ( NO incluir ultimo \ )
'NombreArchivo = ActiveWorkbook.Path ' si deseas que se grabe en la ruta actual

' Adaptar esta linea según hoja y la celda donde este el nombre de archivo
NombreArchivo = NombreArchivo & "\" & Sheets("FACTURA").Range("C11") & " " & Range("H6").Value

' Establecer el rango a exportar, usar solo UNA de las siguientes LINEAS
'Set RangoEscogido = Sheets("Presupuesto") ' para exportar toda la hoja
Set RangoEscogido = Sheets("FACTURA").Range("A1:K50") ' para exportar solo ese rango

If Left(NombreArchivo, 4) = ".pdf" Then NombreArchivo = NombreArchivo & ".pdf"
Sheets("FACTURA").Select
Range("A1").Select

' PREGUNTA PARA EXPORTAR EL ARCHIVO
pregunta1 = MsgBox("¿Desea exportar el archivo a PDF?", vbYesNoCancel, "Confirmación para Exportar el archivo a PDF")
If pregunta1 = vbCancel Then Exit Sub
If pregunta1 = vbYes Then
' Esta linea crea el PDF
RangoEscogido.ExportAsFixedFormat Type:=xlTypePDF, Filename:=NombreArchivo, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
MsgBox "Datos exportados a " & NombreArchivo, vbOKOnly, "INFORME"
End If

' PREGUNTA PARA IMPRIMIR EL ARCHIVO
pregunta2 = MsgBox("¿Desea imprimir el archivo?", vbYesNo, "Confirmación para Exportar el archivo a PDF")
If pregunta2 = vbYes Then
' Solicitar numero de copias
pregunta2a = InputBox("¿Cuantas hojas desea imprimir? (0 para cancelar)", "Parámetro de Impresión")
' Esta linea imprime
If pregunta2a > 0 Then RangoEscogido.PrintOut Copies:=pregunta2a, Collate:=True
End If

End Sub

2 respuestas más de otros expertos

Respuesta
3

La macro está bien.

Hay que revisar qué tiene en la celda T1 y qué tienes en la celda T2

También revisa si en tu excel tienes la opción para guardar archivos como PDF.

Cómo vas a envirar el correo, ¿por outlook?

Estimado Dante,

Revisé la opción como dices de si mi excel permitía guardar en PDF y efectivamente no la tenía habilitada. Descargué el archivo y ya me permite imprimir y guardar el PDF.

Ahora viene la segunda parte, poder adjuntar ese mismo PDF que genero en un email, a poder ser de outlook, junto con un texto predefinido (escrito en una celda) en el asunto, y otro texto en el cuerpo del correo electrónico, ¿eso se podría realizar en la macro?

Muchas gracias por tu inestimable ayuda.

Saludos.

Te anexo la macro actualizada. Cambia en estas líneas las celdas y el texto que quieras en el correo:

 'Datos para Enviar correo
    para = Range("B2").Value            'Destinatarios
    asunto = Range("C2").Value          'asunto
    cuerpo = "Envío de correo"          'cuerpo

La macro:

Sub SavePDFMacro2()
'
    ruta = Cells(2, 20).Value
    nombre = Cells(1, 20).Value & ".pdf"
    '
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ruta & nombre, _
        Quality:=xlQualityStandard, IncludeDocProperties:=False, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    '
    'Datos para Enviar correo
    para = Range("B2").Value            'Destinatarios
    asunto = Range("C2").Value          'asunto
    cuerpo = "Envío de correo"          'cuerpo
    '
    Set dam = CreateObject("Outlook.Application").CreateItem(0)
    dam.To = para
    dam.Subject = asunto
    dam.Body = cuerpo
    dam.Attachments.Add ruta & nombre
    MsgBox "Correo enviado"
End Sub

R ecuerda cambiar la valoración a la respuesta. Sal u dos

Respuesta
1

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas