使用VBA更改Excel图表的方向(纵向或横向)

Mik*_*ley 5 layout charts vba graph excel-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
Run Code Online (Sandbox Code Playgroud)

Jea*_*ett 6

使用VBA操作Excel图表总是有点混乱,因为有ChartObject对象然后有Chart对象.每个ChartObject对象都有一个子Chart对象.并不总是非常直观的属性和方法属于哪个属性和方法,哪些属性和方法Chart可以在其父级中找到ChartObject.引用VBA帮助:

[ ChartObject ]表示工作表上的嵌入图表.所述ChartObject对象充当一个容器图表对象.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
Run Code Online (Sandbox Code Playgroud)

这假设您要在单独的页面上打印每个图表.您在代码中所做的是立即打印出每个完整的工作表,但这似乎与您的其余问题不符.

在这里,我使用PDFCreator作为我的打印机,因为我不想在测试此代码时浪费一堆纸.你当然可以根据需要调整它.

我也在打印时设置了活动打印机.当然你也可以使用Application.ActivePrinter,但即使宏运行完毕,这也会影响活动打印机.