Existe uma maneira de imprimir várias planilhas em um documento, com números de página corretos?

1

Eu tenho uma pasta de trabalho que contém várias guias que são usadas para listar dados que são impressos para um relatório. Quando chega a hora de imprimir o relatório, um usuário abre uma central telefônica e seleciona as seções desejadas (planilhas) da pasta de trabalho que gostariam de imprimir.

Eu não fiz essa planilha e, sinceramente, tenho pouca experiência em trabalhar com o Excel nesse nível.

Atualmente, quando as folhas de trabalho são impressas, cada uma é impressa como documento próprio em um PDF. Depois que todas as planilhas são impressas em PDF, o usuário abre o Adobe Acrobat e mescla os PDFs juntos.

Meus usuários gostariam que o Excel imprimisse somente as planilhas selecionadas para um único PDF e para incluir números de página sequenciais em todo o documento. Isso pode ser feito (via Macros ou VBA?)

RLH
fonte

Respostas:

1

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.

Aaron Thomas
fonte
2

Para imprimir apenas planilhas selecionadas, você realmente precisa selecionar duas vezes.
Primeiro, selecione os intervalos que você deseja imprimir em cada planilha. Se apenas uma célula for selecionada, somente uma vez a célula imprimirá para essa planilha.
Segundo, selecione as planilhas que deseja imprimir clicando e clicando com a tecla Ctrl nas guias de planilhas.

Para imprimir números de página no documento, escolha "Layout de página" na faixa de opções e clique na seta na parte inferior direita da seção "Configuração da página". Clique na aba "Cabeçalho / Rodapé", escolha "Rodapé Personalizado ...", e você pode colocar o número da página onde desejar, escolhendo o ícone do número de página para a seção apropriada.

Eu recomendo fazer uma pré-visualização de impressão primeiro, para ver se corresponde ao que você deseja, antes de imprimir em .pdf.

Aaron Thomas
fonte
Eu sei que isso é SuperUser (e questões de código tendem a pertencer no StackOverflow), mas você sabe como fazer isso no VBA? Meus usuários querem uma caixa de listagem que eles possam usar a seleção múltipla das seções do documento do Excel. Este é realmente um bom requisito, porque há um monte de planilhas e mis-clicando, ao selecionar planilhas, é uma coisa muito fácil de fazer.
RLH