我有一个结构如下的电子表格:
- 顶部的摘要部分
- 底部有详细信息
- 摘要部分总结了使用自动过滤器过滤的详细信息部分
有十种产品都需要单独打印,但我希望页脚显示所有打印作业的整体页面位置和总页数。
这可能不太清楚。例如,如果我打印两页产品 A 视图,它将打印第 1 页(共 2 页)和第 2 页(共 2 页)。如果我打印一页产品 B,它将显示第 1 页(共 1 页)。我想要打印两页,让产品 A 显示第 1 页(共 3 页)、第 2 页(共 3 页),产品 B 显示第 3 页(共 3 页)。有什么方法可以实现吗?
更新: 我希望有一个只适用于 Excel 的答案,但没有人能够提供答案。我将发布我正在使用的解决方法。在我选择自己的答案之前,我会把这个问题留一段时间。
更新2: 托马斯的答案是正确的——仅限 Excel/VBA!
答案1
这里有两个不同的问题。
- 如何在页脚中放置页码
- 如何在应用每个过滤器后运行应用多个自动过滤器打印。
首先,您可以在“页面设置”中执行此操作:
- 进入页面设置:
- 单击页眉/页脚
- 单击“自定义页脚...”按钮
- 在其中一个部分中输入“第 &[Page] 页,共 &[Pages] 页”。这表示在每页底部显示的代码等
Page 1 of 2
。Page 2 of 2
要完成第二项任务,您需要一个宏,这意味着您需要将文件另存为启用宏的文件 (xlsm)。 完成此操作后,您需要通过以下方式显示“开发人员”选项卡:
- 单击 Excel 窗口左上角的花朵,选择“Excel 选项”
- 确保选择了“热门”部分
- 确保选中“在功能区中显示开发人员选项卡”。
现在您已经有了管理宏的可见按钮,您需要录制一个宏,它将允许您自动执行应用各种过滤器以及每次过滤器后打印的过程。
- 点击“开发人员”选项卡
- 单击“录制宏”按钮。
- 录制开始后,运行您想要自动化的流程。例如,应用过滤器、打印、应用另一个过滤器、打印等。
您的宏将以 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
我使用的解决方法如下:
- 使用 VBA 将我的打印机更改为 Adobe Acrobat Pro
- 使用 VBA,循环遍历我的过滤器,将每个视图打印到不同的 PDF 文件中,并使用过滤器作为文件名。
- 将所有文件导入 Adobe Acrobat 中的一个主文件中。
- 在 Adobe Acrobat 中添加页码。
我真的希望有一个仅 Excel/VBA 的解决方案,但我不确定是否可行。