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

如何在现有VBA代码中添加“Fit All Columns on One Page”打印机设置

问题:给数据透视表打印VBA添加「将所有列调整到一页」设置

我从网上找到一段实用的VBA代码,用来打印数据透视表首个报表筛选字段下每个项对应的内容。现在想加个额外步骤,把打印机设置改成将所有列调整到一页。作为VBA新手,我谷歌搜了相关方法但都没用,请问该怎么实现?

原代码如下:

Sub PrintFirstFilterItems()
'downloaded from contextures.com
 'prints a copy of pivot table
 'for each item in
 'first Report Filter field
On Error Resume Next
Dim ws As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Set ws = ActiveSheet
Set pt = ws.PivotTables(1)
Set pf = pt.PageFields(1)

If pf Is Nothing Then Exit Sub

For Each pi In pf.PivotItems
  pt.PivotFields(pf.Name) _
        .CurrentPage = pi.Name
  ActiveSheet.PrintOut  'for printing
  'ActiveSheet.PrintPreview  'for testing
Next pi
End Sub
解决方法

要实现将所有列调整到一页的打印设置,只需在打印操作前添加工作表页面设置的代码即可。修改后的完整代码如下:

Sub PrintFirstFilterItems()
'downloaded from contextures.com
 'prints a copy of pivot table
 'for each item in
 'first Report Filter field
On Error Resume Next
Dim ws As Worksheet
Dim pt As PivotTable
Dim pf As PivotField
Dim pi As PivotItem
Set ws = ActiveSheet
Set pt = ws.PivotTables(1)
Set pf = pt.PageFields(1)

If pf Is Nothing Then Exit Sub

' 设置打印选项:将所有列调整到一页
With ws.PageSetup
    .FitToPagesWide = 1 ' 强制列宽适配1页
    .FitToPagesTall = False ' 行数不限制,自动分页
    .Zoom = False ' 必须关闭缩放,才能启用适配设置
End With

For Each pi In pf.PivotItems
  pt.PivotFields(pf.Name) _
        .CurrentPage = pi.Name
  ws.PrintOut  ' 改用提前定义的ws对象,更规范
  'ws.PrintPreview  ' 测试时可以用这个预览
Next pi
End Sub

关键说明:

  • .FitToPagesWide = 1:指定所有列必须缩放到一页宽度内
  • .FitToPagesTall = False:允许内容按实际行数自动分页,不限制页数
  • .Zoom = False:必须关闭缩放功能,否则适配设置不会生效
  • 把原代码中的ActiveSheet换成定义好的ws对象,能避免操作过程中切换工作表导致的错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:15:39