我正在尝试编写一个宏来自动打印我使用另一个宏在工作簿中创建的所有图表。 (几百个)我遇到的问题是我无法弄清楚如何使用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
答案 0 :(得分:6)
使用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
,但即使宏运行完毕,也会影响活动打印机。