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