工作簿可以包含各种数据。如果您的工作簿包含多个工作表,每个工作表仅包含少量数据,则您可能想知道是否存在一种方法可以在一张纸上打印多个工作表。

您可以通过几种方法来解决此问题。第一种是使用打印机驱动程序的功能,简单地每张纸打印多页。例如,我有一个较旧的HP LaserJet,并且打印机驱动程序允许我指定每张纸要打印的页数。如果我想在一张纸上全部打印三个或四个单页工作表,则需要执行以下步骤:

。按Ctrl + P。 Excel将显示“打印”对话框(Excel 2007)或打印选项(Excel 2010和Excel 2013)。

。如果使用的是Excel 2007,请在对话框的“打印内容”区域中选择“整个工作簿”选项。如果您使用的是更高版本的Excel,请使用“设置”标题下的下拉列表选择“打印整个工作簿”。

。单击“属性”按钮(Excel 2007)或“打印机属性”链接(Excel的更高版本)。 Excel将显示打印机的“属性”对话框,并选择“布局”选项卡。

。将“每页打印页数”控件设置为4。 。单击“确定”关闭“属性”对话框。

。单击确定以实际打印工作表。

您的打印机可能提供与此处概述的功能类似的功能,但是您可能需要通过打印机的“属性”对话框进行一些探索才能找到该功能。当然,以这种方式打印可能会导致打印输出上出现一些非常小的文本,因为打印机驱动程序会简单地缩小每个页面以占据打印页面的相应区域。如果要减少一些空白,从而增加打印文本的大小,则需要寻找其他解决方案。

为了巩固打印的内容,许多人实际上创建了一个“打印工作表”,其中仅包含对要在工作簿中其他工作表上打印的区域的引用。这些引用可以通过引用每个工作表上数据的公式来完成,也可以使用Excel中的摄影机工具来完成。 (已在_ExcelTips的其他问题中描述了相机工具。)

对于将多个工作表合并为一个工作表的自动化解决方案,可以使用宏。下面的宏将在工作簿的末尾创建一个新的工作表,并将所有其他工作表的内容复制到其中。

Sub PrintOnePage()

Dim wshTemp As Worksheet, wsh As Worksheet  Dim rngArr() As Range, c As Range  Dim i As Integer  Dim j As Integer

ReDim rngArr(1 To 1)

For Each wsh In ActiveWorkbook.Worksheets  i = i + 1  If i > 1 Then ' resize array   ReDim Preserve rngArr(1 To i)

End If

On Error Resume Next  Set c = wsh.Cells.SpecialCells(xlCellTypeLastCell)

If Err = 0 Then   On Error GoTo 0

'Prevent empty rows   Do While Application.CountA(c.EntireRow) = 0 _   And c.EntireRow.Row > 1   Set c = c.Offset(-1, 0)

Loop

Set rngArr(i) = wsh.Range(wsh.Range("A1"), c)

End If  Next wsh

'Add temp.Worksheet  Set wshTemp = Sheets.Add(after:=Worksheets(Worksheets.Count))



On Error Resume Next  With wshTemp  For i = 1 To UBound(rngArr)

If i = 1 Then   Set c = .Range("A1")

Else   Set c = _    ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell)

Set c = c.Offset(2, 0).End(xlToLeft) 'Skip one row   End If

'Copy-paste range (prevent empty range)

If Application.CountA(rngArr(i)) > 0 Then   rngArr(i).Copy c   End If  Next i  End With  On Error GoTo 0

Application.CutCopyMode = False ' prevent marquies

With ActiveSheet.PageSetup 'Fit to 1 page  .Zoom = False  .FitToPagesWide = 1  .FitToPagesTall = 1  End With

'Preview New Sheet  ActiveWindow.SelectedSheets.PrintPreview

'Print Desired Number of Copies  i = InputBox("Print how many copies?", "ExcelTips", 1)

If IsNumeric(i) Then  If i > 0 Then   ActiveSheet.PrintOut Copies:=i  End If  End If

'Delete temp.Worksheet?

If MsgBox("Delete the temporary worksheet?", _  vbYesNo, "ExcelTips") = vbYes Then  Application.DisplayAlerts = False  wshTemp.Delete  Application.DisplayAlerts = True  End If End Sub

组合的工作表放在一起后,宏将使用“打印预览”显示工作表。关闭打印预览后,它会询问您要打印多少份工作表。如果输入的数字大于零,则将打印许多副本。最后,该宏可以在完成之前为您删除组合的工作表。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(8315)适用于Microsoft Excel 2007、2010和2013。您可以在以下版本的Excel的较旧菜单界面中找到本技巧的版本:

链接:/ excel-Printing_Multiple_Worksheets_on_a_Single_Page [在单个页面上打印多个工作表]。