Se você quiser usar uma caixa de listagem, recomendo configurar um formulário de usuário com uma caixa de listagem e um botão de comando. A caixa de listagem precisará ter multisseleção ativada, o que você pode fazer a partir do código.
Novamente, isso imprimirá não apenas as planilhas selecionadas, mas também a seleção de cada planilha. Você precisará verificar se as células corretas estão destacadas em cada planilha antes de executar o código da sua caixa de listagem.
Não seria necessário incluir números de página em seu código, porque uma vez configurado isso ( veja a resposta acima ) vai ficar assim até mudar de novo. Se você quiser que permaneça assim para sempre, salve a pasta de trabalho depois de configurar o rodapé personalizado.
Aqui está um código de exemplo para você começar. Ele assume que o formulário do usuário é chamado UserForm, a caixa de listagem é ListBox1 e o botão de comando é cmd_print. Todas as linhas que começam com 'são comentários para o código depois dele.
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
Mais ajuda em qualquer uma dessas funções pode ser acessada através da ajuda do VBA.
Você pode adicionar números de página originais novamente (e combinar vários trabalhos de impressão) em esta solução comercial .
fonte