我有一个工作簿,其中包含多个选项卡,用于列出要为报告打印的数据。当需要打印报告时,用户会打开一个切换面板并选择他们想要打印的工作簿部分(工作表)。
我没有制作这个电子表格,而且说实话,我在这个级别的 Excel 工作经验很少。
目前,打印工作表时,每张工作表都会作为单独的文档打印为 PDF。所有工作表打印为 PDF 后,用户打开 Adobe Acrobat 并将 PDF 合并在一起。
我的用户希望 Excel 仅将选定的工作表打印为单个 PDF,并在整个文档中包含连续的页码。这可以做到吗(通过宏或 VBA?)
答案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 帮助获取有关这些函数的更多帮助。
答案2
要仅打印选定的工作表,您实际上必须选择两次。
首先,从每个工作表中选择要打印的范围。如果只选择一个单元格,则只会为该工作表打印一个单元格。
其次,通过单击并按住 Ctrl 键单击工作表的选项卡来选择要打印的工作表。
要在文档中打印页码,请从功能区中选择“页面布局”,然后单击“页面设置”部分右下角的箭头。单击“页眉/页脚”选项卡,选择“自定义页脚...”,然后可以通过选择相应部分的页码图标将页码放置在所需的位置。
我建议在打印为 .pdf 之前先进行打印预览,看看它是否符合您的要求。
答案3
您可以再次添加原始页码(并合并多个打印作业)此商业解决方案。