如何将VLOOKUP更新的单页打印为单个PDF?修改VBA代码实现多页单文件打印
问题:如何将循环生成的多份工作表打印为单个多页文件?
需求:现有代码会根据循环次数打印多个独立文件,希望修改为通过PrintOut输出单个多页文件。
补充说明:ActiveSheet.Cells(1, 16).Value是1到n的动态值,用于从其他工作表VLOOKUP获取数据。比如设为4时,会打印4份数据不同的同一张工作表,但目前是4个独立文件,想要合并成一个4页的文件。
旧代码:
Sub PrintAll() Dim i, s, e As Integer s = 1 e = ActiveSheet.Cells(1, 16).Value For i = s To e ActiveSheet.Cells(7, 4).Value = i ActiveWindow.SelectedSheets.PrintOut Next i ActiveSheet.Cells(7, 4).Value = 1 End Sub
尝试过将ActiveWindow.SelectedSheets存入对象数组或工作表数组,但无法实现合并打印。
解决方案
可以通过临时新建一个工作簿,每次循环将更新数据后的工作表复制到这个临时工作簿中,最后一次性打印临时工作簿的所有工作表,就能得到单个多页文件。修改后的代码如下:
Sub PrintAsSingleMultiPageFile() Dim i, s, e As Integer Dim tempWB As Workbook Dim sourceWS As Worksheet ' 初始化变量 Set sourceWS = ActiveSheet s = 1 e = sourceWS.Cells(1, 16).Value ' 创建临时工作簿 Set tempWB = Workbooks.Add(xlWBATWorksheet) ' 删除默认的空白工作表(可选,避免最后多一页空白) Application.DisplayAlerts = False tempWB.Sheets(1).Delete Application.DisplayAlerts = True ' 循环生成并复制工作表到临时工作簿 For i = s To e ' 更新当前工作表的数据 sourceWS.Cells(7, 4).Value = i ' 复制当前工作表到临时工作簿末尾 sourceWS.Copy After:=tempWB.Sheets(tempWB.Sheets.Count) Next i ' 打印临时工作簿的所有工作表 tempWB.PrintOut ' 清理临时工作簿(不保存直接关闭) Application.DisplayAlerts = False tempWB.Close SaveChanges:=False Application.DisplayAlerts = True ' 恢复原工作表的初始值 sourceWS.Cells(7, 4).Value = 1 End Sub
代码说明:
- 临时工作簿:新建空白工作簿存放所有生成的工作表副本,不影响原文件。
- 复制工作表:每次更新数据后,将当前工作表复制到临时工作簿,页面会按循环顺序排列。
- 批量打印:一次性打印临时工作簿的所有工作表,输出即为单个多页文件。
- 清理操作:打印完成后关闭临时工作簿且不保存,避免残留文件。
内容的提问来源于stack exchange,提问作者M PP
相关产品推荐
相关产品推荐

