我设置了一些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
来自Range,prntOrient
拉出Orientation
基本上我正在寻找的是示例范围A1:J56
的纵向版本,然后是示例范围A1:J80
的横向版本。横向版本打印为两页,尽管被告知适合一页。无论第一个条目是否也存在,以及是否在Excel中手动重置打印设置,都会发生这种情况。
我已经尝试了上面四个命令的几乎所有排列,顺序似乎没有什么区别。设置.PrintArea = False
让我觉得刷新印刷区域可能有所帮助,但我不相信它。如果我手动完成这些步骤,那么我可以将它转换为所需的格式,但是这个宏的全部要点是我不必这样做。
有没有人知道我缺少什么?
提前致谢!
编辑:更准确的标题。
编辑2:每个人的请求更详细,抱歉!
编辑3:扩展代码以显示变量分配
答案 0 :(得分: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将覆盖我放置的设置。