H o l a:
Te anexo la macro.
En esta línea de la macro tienes que poner la ruta y nombre del programa Adobe Reader que tengas:
pid = Shell("C:\Archivos de programa\Adobe\Reader 10.0\Reader\AcroRd32.exe /p /h """ & ruta & arch & """", vbMinimizedNoFocus)
En mi caso el Adobe Reader está en esta ruta:
"C:\Archivos de programa\Adobe\Reader 10.0\Reader\AcroRd32.exe
Para ver en cuál ruta está tu Adobe Reader, busca el icono de Adobe Reader en el escritorio de tu computadora, presiona click derecho y elige propiedades, copia el contenido del campo Destino y pégalo en la macro. Verifica que las comillas queden como en el ejemplo que te estoy enviando.
La macro:
Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Public Const PROCESS_TERMINATE As Long = (&H1) 'Para poder utilizar el handle para cerrar el proceso
Sub ImprimirPDFs()
'referencia: https://codigoexcel.wordpress.com/tag/imprimir/
'Act.Por.Dante Amor
Dim i As Integer, j As Integer, pid As Long, hnd As Long, ruta As String, arch As String
Set h1 = Sheets("Hoja1")
Set h2 = Sheets("Hoja2")
h2.Cells.Clear
j = 2
n = 1
On Error Resume Next
u = h1.Range("G" & Rows.Count).End(xlUp).Row
Application.StatusBar = False
For i = 2 To u
Application.StatusBar = "Imprimiendo " & n & " de " & u
n = n + 1
ruta = h1.Cells(i, "A")
If Right(ruta, 1) <> "\" Then ruta = ruta & "\"
arch = h1.Cells(i, "G")
If UCase(Right(arch, 4)) <> ".PDF" Then arch = arch & ".pdf"
If Dir(ruta & arch) <> "" Then
pid = Shell("C:\Archivos de programa\Adobe\Reader 10.0\Reader\AcroRd32.exe /p /h """ & ruta & arch & """", vbMinimizedNoFocus)
DoEvents
Application. Wait Now + TimeValue("00:00:07")
DoEvents
hnd = OpenProcess(PROCESS_TERMINATE, True, pid)
DoEvents
TerminateProcess hnd, 0
DoEvents
Application. Wait Now + TimeValue("00:00:07")
Else
h2.Cells(j, "G") = arch
j = j + 1
End If
Next
Application.StatusBar = False
MsgBox "fin"
End Sub
En la "Hoja 1" pon tus datos, en la "Hoja 2" columna G te pondrá el nombre de los archivos que no fueron encontrados.
El proceso de impresión de un PDF depende de la velocidad en que se abra tu archivo pdf, se imprima y se cierre el pdf, por eso en la macro hay una instrucción para esperar este proceso de apertura y cierre del pdf, si encuentras que hay archivos que no se imprimieron, entonces debes incrementar el tiempo de espera, yo lo puse en 7 segundos, entonces cambia de 07 a 10 y vuelve a probar.
Application.Wait Now + TimeValue("00:00:07")
' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )