You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否有宏可按报表筛选器打印数据透视表并合并为单个PDF文件

VBA宏调整方案:多筛选条件透视表合并导出为单个PDF

直接替换原有代码即可实现所有有效筛选结果合并为同一个PDF文件:

Sub PrintAll()
'
' PrintAll Macro
' 所有员工透视表合并导出为单个PDF
'
Dim Response As VbMsgBoxResult
Response = MsgBox("是否导出所有员工的透视表汇总?", vbYesNo)
If Response = vbNo Then Exit Sub

Application.ScreenUpdating = False
Application.DisplayAlerts = False

On Error GoTo ErrHandler

' 刷新透视表缓存
ActiveSheet.PivotTables("PivotTable1").PivotCache.Refresh

Dim pf As PivotField
Dim pi As PivotItem
Set pf = ActiveSheet.PivotTables("PivotTable1").PivotFields("name")

' 创建临时工作表存放所有汇总内容
Dim tempSheet As Worksheet
Set tempSheet = ThisWorkbook.Worksheets.Add
Dim lastRow As Long
lastRow = 1
Dim pivotRange As Range

For Each pi In pf.PivotItems
    ActiveSheet.PivotTables("PivotTable1").PivotFields("name").CurrentPage = pi.Name
    ' 过滤无数据的空筛选结果
    If ActiveSheet.PivotTables("PivotTable1").PivotFields("name").CurrentPage.Caption = pi.Caption Then
        Set pivotRange = ActiveSheet.PivotTables("PivotTable1").TableRange2
        ' 复制当前透视表到临时表
        pivotRange.Copy
        tempSheet.Cells(lastRow, 1).PasteSpecial Paste:=xlPasteAllUsingSourceTheme
        ' 每份透视表之间插入分页符
        tempSheet.HPageBreaks.Add Before:=tempSheet.Cells(lastRow + pivotRange.Rows.Count + 1, 1)
        ' 更新下一次粘贴的起始行位置
        lastRow = lastRow + pivotRange.Rows.Count + 1
    End If
Next

' 删除最后多余的分页符
If tempSheet.HPageBreaks.Count > 0 Then tempSheet.HPageBreaks(tempSheet.HPageBreaks.Count).Delete

' 导出合并后的PDF,可自行修改路径和文件名
tempSheet.ExportAsFixedFormat _
    Type:=xlTypePDF, _
    Filename:=ThisWorkbook.Path & "\员工透视表汇总.pdf", _
    Quality:=xlQualityStandard

MsgBox "PDF汇总导出完成,文件保存在:" & ThisWorkbook.Path & "\员工透视表汇总.pdf"

Cleanup:
' 清理临时工作表和恢复设置
If Not tempSheet Is Nothing Then tempSheet.Delete
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Exit Sub

ErrHandler:
MsgBox "运行出错:" & Err.Description
GoTo Cleanup
End Sub

核心调整说明

  • 取消原有循环外单次打印/循环内多次打印的逻辑,新增临时工作表存放所有非空筛选后的透视表内容
  • 每份透视表粘贴后自动插入分页符,保证导出后每份内容独占一页
  • 所有内容收集完成后统一执行导出操作,最终生成单个PDF文件
  • 新增错误处理和状态恢复逻辑,避免运行出错后Excel设置异常

自定义修改提示

  • 如需直接打印而不是导出PDF,将tempSheet.ExportAsFixedFormat开头的导出代码块替换为tempSheet.PrintOut即可
  • 如需修改PDF保存路径和文件名,直接修改Filename参数的取值即可
  • 如需调整透视表复制的范围,可将TableRange2替换为TableRange1(仅导出数据区域不含筛选器)

内容的提问来源于stack exchange,提问作者David Hoeksema

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:06:03