1

У меня есть рабочая книга, содержащая несколько вкладок, которые используются для отображения данных, которые печатаются для отчета. Когда приходит время распечатать отчет, пользователь открывает распределительный щит и выбирает нужные разделы (рабочие листы) рабочей книги, которые они хотели бы распечатать.

Я не создавал эту таблицу и, честно говоря, у меня мало опыта работы с Excel на этом уровне.

В настоящее время, когда рабочие листы печатаются, каждый печатается как отдельный документ в PDF. После того, как все рабочие листы напечатаны в PDF, пользователь открывает Adobe Acrobat и объединяет PDF-файлы вместе.

Мои пользователи хотели бы, чтобы Excel печатал только выбранные листы в один PDF-файл и включал последовательные номера страниц по всему документу. Можно ли это сделать (с помощью макросов или VBA?)

3 ответа3

2

Чтобы распечатать только выбранные листы, вы должны выбрать два раза.
Сначала выберите диапазоны, которые вы хотите распечатать на каждом листе. Если выбрана только одна ячейка, для этой таблицы будет напечатана только одна ячейка.
Во-вторых, выберите листы, которые вы хотите распечатать, нажав и удерживая клавишу CTRL на вкладках для листов.

Чтобы распечатать номера страниц по всему документу, выберите "Макет страницы" на ленте, затем щелкните стрелку в правом нижнем углу раздела "Параметры страницы". Нажмите на вкладку «Верхний / нижний колонтитул», выберите «Пользовательский нижний колонтитул ...», и вы можете разместить номер страницы в нужном месте, выбрав значок номера страницы для соответствующего раздела.

Я бы порекомендовал сделать предварительный просмотр перед тем, как печатать в формате .pdf, чтобы убедиться, что он соответствует желаемому.

1

Если вы хотите использовать список, я бы порекомендовал настроить форму пользователя со списком и кнопкой. В этом списке необходимо включить множественный выбор, что можно сделать из кода.

Опять же, это распечатает не только выбранные рабочие листы, но и выборку из каждого рабочего листа. Вы должны убедиться, что в каждом листе выделены правильные ячейки, прежде чем запускать код для вашего списка.

Было бы необязательно включать номера страниц в ваш код, потому что, как только это настроено (см. Ответ выше), оно останется таким до тех пор, пока не будет изменено снова. Если вы хотите, чтобы так было всегда, сохраните книгу после настройки пользовательского нижнего колонтитула.

Вот пример кода, чтобы вы начали. Предполагается, что пользовательская форма называется UserForm, список - ListBox1, а командная кнопка - cmd_print. Любые строки, начинающиеся с ', являются комментариями к коду после него.

 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

Дополнительная справка по любой из этих функций доступна через справку VBA.

0

Вы можете снова добавить номера страниц оригинала (и объединить несколько заданий на печать) в этом коммерческом решении.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .