VBA 页面设置语句仅在调试模式下执行
VBA statements for pagesetup only executed in debug mode
以下子程序应该为 PDF 输出准备页面设置。
例如,如果由于连接的其他打印机导致分页器出现问题,子程序应将其修复为 1 页宽和 3 页高。
Sub adjustPB(ws As Variant, ps As XlPaperSize)
'On Error Resume Next
Application.DisplayAlerts = False
Application.PrintCommunication = False
With ws.PageSetup
.LeftMargin = Application.InchesToPoints(0)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
.Orientation = xlLandscape
'.Orientation = xlPortrait
.PaperSize = ps
.Zoom = 100
.Zoom = False
Debug.Print .Zoom
.FitToPagesWide = 1
Debug.Print .Zoom
Debug.Print .FitToPagesWide
.FitToPagesTall = 3
End With
Application.DisplayAlerts = True
Application.PrintCommunication = True
End Sub
当我在 'With ws.PateSetup' 处添加断点时,sub 实际上在单步 (F8) 中按预期工作。
但是,如果我 运行 它使用 F5,它会忽略这些语句。
调试打印显示,属性值没有改变。
到目前为止尝试过的事情:
使用 DoEvents 在 .zoom 和 .FitPagesWide 之前添加最多 1 秒的延迟。没变化。例如 Zoom 仍然是 55。
在单步中,Zoom 最后读取 FALSE。
任何解释/提示这里出了什么问题?
.PrintCommunication
可能是关键。此时的文档相当晦涩,但看起来 Excel 在 .PrintCommunication
关闭时缓存所有命令,并在您打开 .PrintCommunication
时将它们转储到页面设置引擎。这可能是 运行 F5 时看不到任何变化的原因。 (调试器的服务对我来说更加晦涩。)
尝试应用
With ActiveSheet.PageSetup
' ....
.Parent.Application.PrintCommunication = True
.Zoom = 100
.Zoom = False
Debug.Print .Zoom
.FitToPagesWide = 1
Debug.Print .Zoom
Debug.Print .FitToPagesWide
.FitToPagesTall = 3
.Parent.Application.PrintCommunication = False
' ....
End With
Application.PrintCommunication = True
我也很想知道结果:)
以下子程序应该为 PDF 输出准备页面设置。 例如,如果由于连接的其他打印机导致分页器出现问题,子程序应将其修复为 1 页宽和 3 页高。
Sub adjustPB(ws As Variant, ps As XlPaperSize)
'On Error Resume Next
Application.DisplayAlerts = False
Application.PrintCommunication = False
With ws.PageSetup
.LeftMargin = Application.InchesToPoints(0)
.RightMargin = Application.InchesToPoints(0)
.TopMargin = Application.InchesToPoints(0)
.BottomMargin = Application.InchesToPoints(0)
.HeaderMargin = Application.InchesToPoints(0)
.FooterMargin = Application.InchesToPoints(0)
.Orientation = xlLandscape
'.Orientation = xlPortrait
.PaperSize = ps
.Zoom = 100
.Zoom = False
Debug.Print .Zoom
.FitToPagesWide = 1
Debug.Print .Zoom
Debug.Print .FitToPagesWide
.FitToPagesTall = 3
End With
Application.DisplayAlerts = True
Application.PrintCommunication = True
End Sub
当我在 'With ws.PateSetup' 处添加断点时,sub 实际上在单步 (F8) 中按预期工作。 但是,如果我 运行 它使用 F5,它会忽略这些语句。 调试打印显示,属性值没有改变。
到目前为止尝试过的事情: 使用 DoEvents 在 .zoom 和 .FitPagesWide 之前添加最多 1 秒的延迟。没变化。例如 Zoom 仍然是 55。 在单步中,Zoom 最后读取 FALSE。 任何解释/提示这里出了什么问题?
.PrintCommunication
可能是关键。此时的文档相当晦涩,但看起来 Excel 在 .PrintCommunication
关闭时缓存所有命令,并在您打开 .PrintCommunication
时将它们转储到页面设置引擎。这可能是 运行 F5 时看不到任何变化的原因。 (调试器的服务对我来说更加晦涩。)
尝试应用
With ActiveSheet.PageSetup
' ....
.Parent.Application.PrintCommunication = True
.Zoom = 100
.Zoom = False
Debug.Print .Zoom
.FitToPagesWide = 1
Debug.Print .Zoom
Debug.Print .FitToPagesWide
.FitToPagesTall = 3
.Parent.Application.PrintCommunication = False
' ....
End With
Application.PrintCommunication = True
我也很想知道结果:)