[英]Changing the orientation (portrait or landscape) of an Excel chart using VBA
我正在尝试编写一个宏,以使用另一个宏自动打印在工作簿中创建的所有图表。 (实际上是数百个)我遇到的问题是我无法弄清楚如何使用VBA将图形从纵向布局更改为横向布局。 我想知道是否有人可以帮助我。 我尝试了下面的代码,但是它在行“ .ChartObjects(x).PageSetup.Orientation = xlLandscape”处给了我一个错误,我知道对于图表对象来说,这不是正确的属性,但是我无法弄清楚否则。
任何帮助,将不胜感激!
Option Explicit
Sub Print_All_Charts()
Dim szASheet As String
szASheet = ActiveSheet.Name
Dim lChartObjCount As Long
lChartObjCount = ActiveSheet.ChartObjects.Count
With Application
.ScreenUpdating = False
.ActivePrinter = "HP Color LaserJet 5550 PS on Ne08:"
'On Error Resume Next
Dim wks As Worksheet
For Each wks In ActiveWorkbook.Worksheets
Dim x As Long
For x = 1 To lChartObjCount
With wks
.ChartObjects(x).PageSetup.Orientation = xlLandscape
.ChartObjects(x).Select
.ChartObjects(x).Activate
.PrintOut , , 1
End With
Next x
Next wks
ActiveChart.Deselect
With Sheets(szASheet)
.Select
.Range("A1").Select
End With
.ScreenUpdating = True
End With
End Sub
使用VBA操纵Excel图表总是有些混乱,因为先有ChartObject
对象,再有Chart
对象。 每个ChartObject
对象都有一个子Chart
对象。 哪些属性和方法属于Chart
以及哪些属性和方法可以在其父ChartObject
上找到并不总是很直观的。 引用VBA帮助:
[ ChartObject ]表示工作表上的嵌入式图表。 ChartObject对象充当Chart对象的容器。 ChartObject对象的属性和方法控制工作表上嵌入式图表的外观和大小。
如果您不戴眼镜,那么阅读VBA帮助可能会让您发疯,因为ChartObject
含义不同于Chart
对象!
无论如何,事实证明, .PageSetup.Orientation
位于Chart
而不是您推断的ChartObject
。
Dim wks As Worksheet
Dim chartObject As ChartObject
For Each wks In ActiveWorkbook.Worksheets
For Each chartObject In wks.ChartObjects
.Chart.PageSetup.Orientation = xlLandscape ' or xlPortrait
.Chart.PrintOut Preview:=True, ActivePrinter:="PDFCreator"
Next
Next
假设您要在单独的页面上打印每个图表。 您在代码中所做的工作是一次打印出每个工作表,但这似乎与其余的问题不一致。
在这里,我使用PDFCreator作为打印机,因为我不想在测试此代码时浪费很多纸。 当然,您可以根据自己的喜好进行调整。
另外,我在打印时设置了活动打印机。 当然,您也可以改用Application.ActivePrinter
,但这将影响活动打印机,即使宏运行完成后也是如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.