domingo, 17 de junio de 2012

VBA: Macro para imprimir los WorkBooks de una carpeta.

Hoy veremos una macro sencilla, que utiliza algunas funciones de VBA muy interesantes, así como algún método o propiedad; y todo con el fín de obtener una impresión de la Hoja1 de todos los ficheros Excel de una carpeta dada. Esta impresión podrá ser bien en papel o bien, si disponemos del software oportuno, directamente en un fichero .pdf.
Supondremos que deseamos imprimir los ficheros de excel que se encuentren en la carpeta D:\Prueba\, y que para nuestro ejemplo, aprovecharemos la aplicación PrimoPDF, para obtener de la Hoja1 de todos los Libros de trabajo de Excel de esas carpeta, el rango seleccionada como área de impresión.

Insertaremos en un módulo del Explorador de proyectos del Editor de VBA el siguiente código, formando nuestra macro de Excel:

Sub Imprimir_Otro_Workbook()
Dim Ruta, Archivos As String
Ruta = "D:\Prueba\"
'representa el nombre de un archivo, directorio
'o carpeta que coincide con el patrón o atributo de archivo especificado
Archivos = Dir(Ruta & "\*.xl*")

Application.ScreenUpdating = False
'Recorremos la carpeta o directorio hasta el último archivo con extensión .xl*
Do While Len(Archivos) > 0
   'Abrimos los WorkBook de la carpeta
   Workbooks.Open Filename:=Ruta & "\" & Archivos
   'Damos la orden de imprimir la Hoja1 del Libro,
   'activando una de las impresores disponibles
   ActiveWorkbook.Sheets(1).PrintOut Copies:=1, ActivePrinter:="PrimoPDF", _
   IgnorePrintAreas:=False
   'Cerramos el WorkBook abierto sin guardar cambios
   ActiveWorkbook.Close savechanges:=False
   'Para obtener más nombres de archivo que coincidan con la Ruta,
   'volveremos a llamar a la función Dir sin argumentos
   Archivos = Dir()
Loop
Application.ScreenUpdating = True
End Sub


La clave de esta macro es la función Dir (ya empleada en est blog), y que nos devuelve una variable, tipo String, que representa el nombre de un archivo, directorio o carpeta que coincide con el patrón o atributo de archivo especificado, o la etiqueta de volumen de una unidad de disco. Con una gran vengtaja, y es que la función Dir permite el empleo de los caracteres comodín '*' (múltiples caracteres) y '?' (un solo carácter) para especificar varios archivos. Además Dir devuelve el primer nombre de archivo que coincide con la Ruta. Para obtener más nombres de archivo que coincidan con la Ruta, volveremos a llamar a la función Dir sin argumentos, esto es, Dir().
Por otro lado empleamos el método Workbooks.Open con su parámetro Filename para abrir los Libros de trabajo (WorkBooks) de la carpeta concreta definida con la función Dir.
También usaremos para configurar la impresión el método ActiveWorkbook.Sheets(1).PrintOut, y sus parámetros Copies,ActivePrinter y IgnorePrintAreas; destacando como clave el parámetro ActivePrinter, con el que indicaremos qué impresora de las existentes deseamos utilizar.
Finalizamos señalando que una vez abierto el Libro de trabajo de Excel, impresa la Hoja1, sólo cabe cerrar el Libro sin guardar cambios, lo que conseguimos con el método ActiveWorkbook.Close y su parámetro savechanges:=False que evita la ventana diálogo de pregunta de si Guardar o No guardar.

No hay comentarios:

Publicar un comentario en la entrada