1

我设置了一些 VBA 代码来获取工作表名称、范围 ( prntRange) 和方向 ( prntOrient) 并打印结果,但似乎 VBA 忽略了页面设置命令。这是一个快速的片段:

For x = 1 To numPages
    Worksheets("Printing").Activate
    prntSheet = Cells(6 + (x - 1), 1)
    prntRange = Cells(6 + (x - 1), 2)
    prntOrient = Cells(6 + (x - 1), 3)

    Application.StatusBar = "Printing " & prntSheet & "..."

    Worksheets(prntSheet).Activate
    With ActiveSheet.PageSetup
        .PrintArea = False
        If prntOrient = "Portrait" Then
            .Orientation = xlPortrait
        Else
            .Orientation = xlLandscape
        End If
        .PrintArea = prntRange
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
    End With
    ...

这是该表的示例:

Sheet Name        Range        Orientation
 Example          A1:J56         Portrait
 Example          A1:J80         Landscape

prntRange从范围prntOrient拉,从方向拉

基本上我正在寻找的是示例范围A1:J56的纵向版本,然后是示例范围的横向版本A1:J80。尽管被告知适合一页,但横向版本打印为两页。无论第一个条目是否也存在,以及我是否手动重置 Excel 中的打印设置,都会发生这种情况。

我已经尝试了上面四个命令的几乎所有排列,并且顺序似乎没有任何区别。设置.PrintArea = False是我认为刷新打印区域可能会有所帮助,但我不相信它会这样做。如果我手动完成这些步骤,那么我可以毫无问题地将其转换为所需的格式,但是这个宏的全部意义在于我不必这样做。

有谁知道我错过了什么?

提前致谢!

编辑:更准确的标题。

编辑 2:根据人们的要求提供更多详细信息,对不起!

编辑 3:扩展代码以显示变量分配

4

1 回答 1

0

对于我在类似情况下遇到的问题,我找到了一个潜在的解决方案。添加Application.PrintCommunication到流程:

Application.PrintCommunication = False
    With ActiveSheet.PageSetup
        .Orientation = xlLandscape
        .Zoom = False
        '.PrintArea = Worksheets(ReportWsName).UsedRange
        .FitToPagesWide = 1
        '.FitToPagesTall = 1
    End With
Application.PrintCommunication = True

无论出于何种原因,如果我在没有它的情况下运行代码,Excel 会覆盖我放置的设置。

于 2014-09-17T08:49:16.280 回答