¿Hay alguna forma de imprimir varias hojas de trabajo en un documento, con los números de página correctos?

1

Tengo un libro de trabajo que contiene varias pestañas que se utilizan para enumerar los datos que se imprimen para un informe. Cuando llega el momento de imprimir el informe, un usuario abre una centralita y selecciona las secciones deseadas (Hojas de trabajo) del Libro de trabajo que desea imprimir.

No hice esta hoja de cálculo y, seré honesto, tengo poca experiencia trabajando con Excel a este nivel.

Actualmente, cuando se imprimen las hojas de trabajo, cada una se imprime como su propio documento en un PDF. Una vez que todas las hojas de trabajo se imprimen en PDF, el usuario abre Adobe Acrobat y combina los PDF.

Mis usuarios desean que Excel imprima solo las hojas de trabajo seleccionadas en un solo archivo PDF e incluya números de página secuenciales en todo el documento. ¿Se puede hacer esto (a través de macros o VBA?)

RLH
fuente

Respuestas:

1

Si desea utilizar un cuadro de lista, recomiendo configurar un formulario de usuario con un cuadro de lista y un botón de comando. El cuadro de lista tendrá que tener activada la selección múltiple, lo que puede hacer desde el código.

Nuevamente, esto imprimirá no solo las hojas de trabajo seleccionadas, sino también la selección dentro de cada hoja de trabajo. Deberá asegurarse de que las celdas correctas estén resaltadas dentro de cada hoja de trabajo antes de ejecutar el código para su cuadro de lista.

No sería necesario incluir números de página en su código, porque una vez que se configura ( ver respuesta arriba ) se mantendrá así hasta que se vuelva a cambiar. Si desea que permanezca así para siempre, guarde el libro después de configurar el pie de página personalizado.

Aquí hay un código de ejemplo para empezar. Asume que el formulario de usuario se llama UserForm, el cuadro de lista es ListBox1 y el botón de comando es cmd_print. Cualquier línea que comience con '' es un comentario para el código posterior.

 Private Sub UserForm_Initialize()
  'make sure listbox1 allows multiple selections
  ListBox1.MultiSelect = fmMultiSelectExtended

  'display all worksheets in listbox1
  Dim sheet_choose As Long
  For sheet_choose = 1 To Worksheets.Count
    ListBox1.AddItem (Worksheets.Item(sheet_choose).Name)
  Next
End Sub

Private Sub cmd_print_Click()
  'use no_selected_worksheets to tell
  'if anything has been selected in
  'listbox1. default = true b/c assumes
  'nothing has been selected until
  'finding out otherwise.
  Dim no_selected_worksheets As Boolean
  no_selected_worksheets = True

  'go through listbox, check what has been
  'selected.
  Dim list_choose As Long
  For list_choose = 0 To ListBox1.ListCount - 1
    'if worksheet has been selected in
    'listbox, make worksheet selected
    'in workbook.
    If ListBox1.Selected(list_choose) Then
      If no_selected_worksheets Then
        'if this is the first worksheet
        'to be selected, make sure no
        'other worksheets are also
        'selected.
        Worksheets(list_choose + 1).Select
        'change to false to indicate a
        'worksheet has been selected.
        no_selected_worksheets = False
      Else
        'if this is *not* the first worksheet
        'to be selected in the listbox, then
        'make sure this worksheet is selected
        'in addition to the other worksheets.
        Worksheets(list_choose + 1).Select (False)
      End If
    End If
  Next

  'if selection(s) made, printout. this will print only
  'the selections.
  If Not no_selected_worksheets Then
    'as alternative to ActiveWorkbook.PrintOut, use
    'ActiveWorkbook.PrintPreview
    ActiveWorkbook.PrintOut
  Else
    'display a message if nothing was selected
    MsgBox "No sheets were selected for printing as .pdf", vbInformation, "PDF printer"
  End If
End Sub

Se puede acceder a más ayuda sobre cualquiera de estas funciones a través de la ayuda de VBA.

Aaron Thomas
fuente
2

Para imprimir solo las hojas de trabajo seleccionadas, en realidad tiene que seleccionar dos veces.
Primero, seleccione los rangos que desea imprimir de cada hoja de trabajo. Si solo se selecciona una celda, solo una vez se imprimirá una celda para esa hoja de trabajo.
En segundo lugar, seleccione las hojas de trabajo que desea imprimir haciendo clic y presionando ctrl haciendo clic en las pestañas de las hojas de trabajo.

Para imprimir números de página en el documento, elija "Diseño de página" en la cinta, luego haga clic en la flecha en la parte inferior derecha de la sección "Configuración de página". Haga clic en la pestaña "Encabezado / pie de página", elija "Pie de página personalizado ...", y puede colocar el número de página donde lo desee al elegir el icono de número de página para la sección correspondiente.

Recomendaría hacer una vista previa de impresión primero, para ver si coincide con lo que desea, antes de imprimir en .pdf.

Aaron Thomas
fuente
Sé que esto es SuperUser (y las preguntas de código tienden a pertenecer a StackOverflow) pero, ¿saben cómo hacerlo en VBA? Mis usuarios desean un cuadro de lista que puedan usar de selección múltiple de las secciones del documento de Excel. Esto es realmente un buen requisito porque hay MUCHAS hojas de trabajo y hacer un error al seleccionar las hojas de trabajo es algo muy fácil de hacer.
RLH