Управление диаграммами Excel с использованием VBA всегда немного сбивает с толку, потому что есть 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
вместо этого, но это повлияет на активный принтер, даже когда макрос завершит работу.