Imprimir por ID o Guardar en archivos PDF desde Excel con macros VBA
En un artículo y video anterior vimos cómo capturar datos en un formulario de hoja de Excel y pasarlos a otra hoja en forma de base de datos, incluso vimos cómo capturar datos en un archivo y guardarlos en otro archivo de Excel como base de datos.
En base a esos archivos se me ocurrió la idea: Si ya tenemos datos guardados como base de datos, por qué no crear una rutina que nos ayude a imprimir el formato de captura, pero en lugar de capturar datos, los datos se rellenen con la función BUSCARV y mandar a imprimir el formato.
De la misma manera, también crearía una rutina que en lugar de mandar a imprimir el formato, el mismo formulario con la información correspondiente a una fila, ésta se imprimiría en un archivo PDF.
Figura 1. Elegiremos si deseamos imprimir o guardar en PDF.
Sin embargo me fui más allá, creé una macro que te solicite un ID inicial y un ID final e imprimimos o guardamos en PDF cada uno de los valores correspondientes a cada ID.
Ver video Imprimir por ID o Guardar en archivos PDF desde Excel
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Preparando el formulario para imprimir
A continuación te mostraré cómo preparar nuestro archivo para que se pueda imprimir en una hoja y darle orientación horizontal. Para ver más tips sobre cómo imprimir correctamente en Excel, te recomiendo este artículo.
-
Seleccionas la sección que deseemos imprimir.
-
Nos vamos a la pestaña Diseño de página > Área de impresión > Establecer área de impresión.
Ahora configuraremos el botón para que se imprima.
-
Damos clic derecho en el botón.
-
Cuando se muestren los nodos, damos clic derecho en uno de los nodos.
-
Elegimos Tamaño y propiedades.
-
Ahora elegiremos desmarcaremos No imprimir.
Figura 2. Desmarcamos No imprimir que no imprimir el botón.
Una vez que definimos el área de impresión, ahora ajustaremos la impresión a una página con orientación horizontal.
-
Nos dirigimos a la pestaña Archivo > Imprimir.
-
Elegimos Configurar página.
-
En la pestaña Página seleccionamos Horizontal.
-
Y seleccionamos Ajustar a 1 página de ancho por 1 de alto.
Figura 3. Confirmamos que se imprimirá en una hoja en orientación horizontal.
Imprimir por ID
Como ya vimos cómo configurar la impresión del formulario, ahora toca probar la opción de imprimir por ID. Damos clic en el botón Imprimir o Guardar en PDF y se nos pedirá que especifiquemos si queremos Imprimir o Guardar en PDF.
Si capturamos 1, entonces se nos pedirá el ID inicial y el ID final.
Figura 4. Elegimos Imprimir y nos pedirá el ID inicial y el ID final.
La siguiente línea de la macro nos permitirá imprimir una hoja de cálculo.
ThisWorkbook.ActiveSheet.PrintOut Copies:=1
Guardar en archivos PDF
Ahora supongamos que deseamos que se guarde en archivo PDF el formulario con cierta información. Si presionamos el botón Imprimir o Guardar, capturamos el 2 y definimos el ID inicial y el ID final, entonces se guardarán n cantidad de archivos PDF dependiente del rango de los ID.
Si capturamos la opción 2 entonces se nos pedirá que elijamos la carpeta donde deseamos que se guarden los archivos PDF.
Figura 5. Elegimos la carpeta donde se guardarán los archivos PDF.
Código VBA de la macro
El siguiente código VBA nos ayudará a decidir si deseamos Imprimir por ID o guardar en archivos PDF.
'EXCELeINFO 'MVP Sergio Alejandro Campos 'http://www.exceleinfo.com 'https://www.youtube.com/user/sergioacamposh 'http://blogs.itpro.es/exceleinfo Option Explicit Sub ElegirAccion() Dim Elegir As Variant Dim i As Integer Dim miArchivo As String Dim Ruta As String Dim intInicial As Integer Dim intFinal As Integer Dim intConsecutivo As Integer Dim srtTitulo As String srtTitulo = "EXCELeINFO" intConsecutivo = ThisWorkbook.Sheets("Datos").Range("CONSECUTIVO").Value Elegir = InputBox("Elige la acción a ejecutar:" & vbNewLine & "1 = Imprimir" & _ vbNewLine & "2 = Guardar en PDF", srtTitulo) If Elegir <> 1 And Elegir <> 2 Then MsgBox "Debe elegir una opción correcta.", vbExclamation, srtTitulo ElseIf Elegir = 1 Then intInicial = InputBox("Introduce el ID inicial", srtTitulo) intFinal = InputBox("Introduce el ID final", srtTitulo) If intFinal < intInicial Or intFinal > intConsecutivo Then MsgBox "Valida el ID final.", vbExclamation, srtTitulo Else For i = intInicial To intFinal ThisWorkbook.Sheets("Imprimir").Range("F4").Value = i MsgBox "Imprimiendo ID '" & i & "'. Presione Aceptar para continuar...", vbInformation, srtTitulo 'ThisWorkbook.ActiveSheet.PrintOut Copies:=1 Next i End If ElseIf Elegir = 2 Then intInicial = InputBox("Introduce el ID inicial", srtTitulo) intFinal = InputBox("Introduce el ID final", srtTitulo) If intFinal < intInicial Or intFinal > intConsecutivo Then MsgBox "Valida el ID final.", vbExclamation, srtTitulo Else 'Propiedad FileDialog With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = Application.DefaultFilePath & " \ " .Title = "EXCELeINFO - Seleccionar carpeta" .Show If .SelectedItems.Count = 0 Then Else Ruta = .SelectedItems(1) For i = intInicial To intFinal ThisWorkbook.Sheets("Imprimir").Range("F4").Value = i MsgBox "Guardando en PDF ID '" & i & "'. Presione Aceptar para continuar...", _ vbInformation, srtTitulo ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ Ruta & "\" & i & ".pdf", Quality:=xlQualityStandard, _ IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False Next i End If End With End If End If End Sub