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

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

。从文件菜单中选择打印。 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培训的来源。

本技巧(3243)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本:

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