【问题标题】:VBA - How to set printarea for multiple pages in one sheet?VBA - 如何在一张纸中设置多页的打印区域?
【发布时间】:2021-06-30 19:22:45
【问题描述】:

我正在使用此代码

Sub print_area()

Dim ws As Worksheet

For Each ws In ActiveWorkbook.Worksheets

With ws.PageSetup

.PrintTitleColumns = "$A:$E"
.PrintArea = ws.Range("A128").Value
.CenterHorizontally = True

End With

Next
End Sub

Range("A128").Value 的值如下:$F$1:$AF$125,$AG$1:$BE$125,$BF$1:$CD$125,$CE$1:$DA$125,$DB$1:$DX $125

打印区域设置不正确(区域接近设置范围但不符合要求),我必须设置哪些其他参数才能使其正常工作?

红色箭头表示打印区域应该在哪里

【问题讨论】:

  • 您可能需要将 Range("A128").Value 更改为 ws.Range("A128").Value,因为您正在循环工作表。
  • 进行了更改,但仍然无法正常工作:/。谢谢

标签: excel vba printing


【解决方案1】:

通常,Excel 根据纸张大小、比例、指定的宽度和高度页数、页面方向和其他参数自动设置打印分页符。您可以将VPageBreak objectHPageBreak object 与许多.PageSetup 属性结合使用来手动调整分页符。请注意,您不能使用 .PrintArea 属性设置分页符(请参阅下面的代码以了解原因)。在下面的代码中,我在单元格“AF1”、“BE1”、“CD1”、“DA1”、“DX1”之后设置了分页符:

Sub print_area()
    Dim ws As Worksheet
    
    For Each ws In ActiveWorkbook.Worksheets
        With ws.PageSetup
            .PrintTitleColumns = "$A:$E"
            .PrintArea = "$F$1:$AF$125,$AG$1:$BE$125,$BF$1:$CD$125,$CE$1:$DA$125,$DB$1:$DX$125" ' there will be one area between the upper left and lower right cells
            Debug.Print .PrintArea  ' check the final .PrintArea; prints $F$1:$DX$125
            .Zoom = False
            .Orientation = xlLandscape
            .FitToPagesWide = False 'it's Auto
            .FitToPagesTall = 1
            .CenterHorizontally = True
            ws.ResetAllPageBreaks
            breaks = Array("AF1", "BE1", "CD1", "DA1", "DX1")   'zero-based array
            For i = 1 To UBound(breaks)
                ws.VPageBreaks.Add Before:=ws.Range(breaks(i - 1)).Offset(, 1)
            Next
        End With
    Next
End Sub

请注意,为了响应您的分页操作,Excel 可以 (通常会)改变分页本身

【讨论】:

  • 谢谢。我试过你的代码,它没有工作。您知道解决此问题的另一种方法吗?
  • 搞了半天,终于看懂了你的代码。谢谢
猜你喜欢
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 2012-01-21
  • 1970-01-01
  • 2013-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多