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.
Puede agregar números de página originales nuevamente (y combinar varios trabajos de impresión) en esta solución comercial .
fuente