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.

Elegiremos si deseamos imprimir o guardar en 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.

Desmarcamos No imprimir que no imprimir el botón.

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.

Confirmamos que se imprimirá en una hoja en orientación horizontal.

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.

Elegimos Imprimir y 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.

Elegimos la carpeta donde se guardarán 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

Descarga el archivo de ejemplo

Descargar el ejemplo Formulario de Excel para IMPRIMIR o GUARDAR EN PDF – EXCELeINFO.zip

You may also like...