1

下面的 sub 应该为 PDF 输出准备 pagesetup。例如,如果由于其他连接的打印机而导致页面制动混乱,则潜艇应将其修复为 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 运行它,它会忽略这些语句。调试打印显示,属性的值没有改变。

到目前为止尝试的事情:在 .zoom 和 .FitPagesWide 之前添加延迟,最多 1 秒。不用找了。例如,Zoom 仍然是 55。在单步中,Zoom 最终读取 FALSE。任何解释/提示这里出了什么问题?

4

1 回答 1

3

.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

我也很好奇看到结果:)

于 2018-02-15T11:51:46.333 回答