将动态工作表打印为一个文档

将动态工作表打印为一个文档

我有一个结构如下的电子表格:

  • 顶部的摘要部分
  • 底部有详细信息
  • 摘要部分总结了使用自动过滤器过滤的详细信息部分

有十种产品都需要单独打印,但我希望页脚显示所有打印作业的整体页面位置和总页数。

这可能不太清楚。例如,如果我打印两页产品 A 视图,它将打印第 1 页(共 2 页)和第 2 页(共 2 页)。如果我打印一页产品 B,它将显示第 1 页(共 1 页)。我想要打印两页,让产品 A 显示第 1 页(共 3 页)、第 2 页(共 3 页),产品 B 显示第 3 页(共 3 页)。有什么方法可以实现吗?

更新: 我希望有一个只适用于 Excel 的答案,但没有人能够提供答案。我将发布我正在使用的解决方法。在我选择自己的答案之前,我会把这个问题留一段时间。

更新2: 托马斯的答案是正确的——仅限 Excel/VBA!

答案1

这里有两个不同的问题。

  1. 如何在页脚中放置页码
  2. 如何在应用每个过滤器后运行应用多个自动过滤器打印。

首先,您可以在“页面设置”中执行此操作:

在此处输入图片描述

  1. 进入页面设置:
  2. 单击页眉/页脚
  3. 单击“自定义页脚...”按钮
  4. 在其中一个部分中输入“第 &[Page] 页,共 &[Pages] 页”。这表示在每页底部显示的代码等Page 1 of 2Page 2 of 2

要完成第二项任务,您需要一个宏,这意味着您需要将文件另存为启用宏的文件 (xlsm)。 完成此操作后,您需要通过以下方式显示“开发人员”选项卡:

  1. 单击 Excel 窗口左上角的花朵,选择“Excel 选项”
  2. 确保选择了“热门”部分
  3. 确保选中“在功能区中显示开发人员选项卡”。

现在您已经有了管理宏的可见按钮,您需要录制一个宏,它将允许您自动执行应用各种过滤器以及每次过滤器后打印的过程。

  1. 点击“开发人员”选项卡
  2. 单击“录制宏”按钮。
  3. 录制开始后,运行您想要自动化的流程。例如,应用过滤器、打印、应用另一个过滤器、打印等。

您的宏将以 VBA(Visual Basic for Applications)编写,结果类似于以下内容:

ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
    IgnorePrintAreas:=False
ActiveSheet.Range("$A$3:$A$568").AutoFilter Field:=1, Criteria1:="=a*", _
    Operator:=xlAnd
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
    IgnorePrintAreas:=False
ActiveSheet.Range("$A$3:$A$568").AutoFilter Field:=1, Criteria1:="=b*", _
    Operator:=xlAnd
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
    IgnorePrintAreas:=False

添加

鉴于您提到的内容,我认为您可以使用如下函数来接近:

Public Sub GetTotalPageCount()
    Dim horizontalBreaks As Integer
    Dim verticalBreaks As Integer

    horizontalBreaks = ActiveSheet.HPageBreaks.Count + 1
    verticalBreaks = ActiveSheet.VPageBreaks.Count + 1

    GetTotalPageCount = horizontalBreaks * verticalBreaks
End Sub

为了实现您想要的总体结果,您需要构建一些类似于以下伪代码的东西:

  • 应用过滤器
  • 将页数添加到全局变量
  • 应用过滤器
  • 将页数添加到全局变量

...

  • (最后一个过滤器后)ActiveSheet.PageSetup.CenterFooter = "Page &P of " & g_TotalPages
  • 应用过滤器
  • 打印
  • 应用过滤器
  • 打印

...

答案2

我使用的解决方法如下:

  1. 使用 VBA 将我的打印机更改为 Adob​​e Acrobat Pro
  2. 使用 VBA,循环遍历我的过滤器,将每个视图打印到不同的 PDF 文件中,并使用过滤器作为文件名。
  3. 将所有文件导入 Adob​​e Acrobat 中的一个主文件中。
  4. 在 Adob​​e Acrobat 中添加页码。

我真的希望有一个仅 Excel/VBA 的解决方案,但我不确定是否可行。

相关内容