动态设置分页符,以便不打印空白页



我有一个用于报价的电子表格。我有8个不同的页面都是垂直对齐的。我设置了分页符,但当我决定不需要页面时,我会自动隐藏它。然而,由于我设置了分页符,当我导出到PDF时,我会得到空白页面。我想在导出到PDF时动态地去掉这些空白页。我是一名机械工程师,没有写太多代码,所以不要笑得太厉害:(。

我可以在excel中编写一个串联函数,说明在上面插入分页符的行数。我喜欢单元格生成分页符编号的原因是,如果我稍后插入一行,它将自动更新。以下是我认为VBA中的步骤:

  1. 删除所有分页符
  2. 将列分页符设置在列AU的左侧
  3. 根据单元格AX2生成的值设置行分页符

以下是到目前为止我对代码的了解,但还没有完全解决。

ActiveSheet.ResetAllPageBreaks
ActiveSheet.Columns(47).PageBreak = xlPageBreakManual
ActiveSheet.Rows("AX2").PageBreak = xlPageBreakManual

作为参考,我的单元格AX2==CONCATENATE的公式(IF(AU76<>",ROW(AU77(&"(,IF(AU199<>",","ROW(AU200(,"&"(,IF(AU342<>",","ROW(AU343(,"&"(,IF(AU403<>",","ROW(AU404(,"&"(,IF(AU454<>",","ROW(AU455(,"&"(,IF(AU507<>",","ROW(AU508(,"&"(,IF(AU555<>",","ROW(AU556(,"&"(,IF(AU597<>",","ROW(AU598(,"&"(,IF(AU652<>",","ROW(AU653(,"(

目前的产量为7720433

此外,我正在宏中使用它导出为PDF。我会在导出到pdf之前插入这个分页符代码。这也是一个参考代码:

Sub ExportToPDF()
'
' ExportToPDF Macro
'
'
ActiveSheet.Unprotect Password:="Password"
ActiveSheet.Range("$A$5:$AU$652").AutoFilter Field:=47, Criteria1:="<>"
ActiveSheet.Range("$A$5:$AV$652").AutoFilter Field:=48, Criteria1:="<>"
Dim Path As String
Dim filename As String
Path = "Destination"
filename = Range("AY15")
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:= _
Path & filename & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
ActiveSheet.Range("$A$5:$AV$652").AutoFilter Field:=48
ActiveSheet.Protect Password:="Password", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True, AllowFiltering:=True
End Sub

我在这里找到了答案:https://www.mrexcel.com/board/threads/dont-print-hidden-rows.436254/page-2#posts

他们做了一些非常相似的事情。我唯一不能用它做的就是将它链接到单元格AX2,以便在插入或删除行时动态更新。所以,如果有人知道如何编辑我的代码,使用单元格AX2来设置这个数组,我很乐意听到!这是我输入的最后一个代码:

Sub ExportToPDF()
'
' ExportToPDF Macro
'
'
ActiveSheet.Unprotect Password:="Password"
ActiveSheet.Range("$A$5:$AU$652").AutoFilter Field:=47, Criteria1:="<>"
ActiveSheet.Range("$A$5:$AV$652").AutoFilter Field:=48, Criteria1:="<>"
Dim pb, i As Integer
pb = Array(77, 200, 345, 406, 457, 510, 558, 600, 655)
ActiveSheet.ResetAllPageBreaks
ActiveSheet.PageSetup.PrintArea = "$A$1:$AT$654"
ActiveSheet.PageSetup.FitToPagesWide = 1
ActiveSheet.PageSetup.Zoom = 76
ActiveSheet.PageSetup.Orientation = xlPortrait
For i = LBound(pb) To UBound(pb)
If ActiveSheet.Rows(pb(i)).Hidden = True Then
ActiveSheet.HPageBreaks.Add Before:=ActiveSheet.Cells(655, 1)
Else
ActiveSheet.HPageBreaks.Add Before:=ActiveSheet.Cells(pb(i), 1)
ActiveSheet.HPageBreaks.Add Before:=ActiveSheet.Cells(655, 1)

End If
Next i
Dim Path As String
Dim filename As String
Path = "FileLocation"
filename = Range("AY15")
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, filename:= _
Path & filename & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True
ActiveSheet.Range("$A$5:$AV$652").AutoFilter Field:=48
ActiveSheet.Protect Password:="Password", DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowFormattingCells:=True, AllowFiltering:=True
End Sub