a_js12
a_js12

Reputation: 329

VBA: Positioning 3 Graphs On A Single Power Point Slide

I have VBA script that exports 3 graphs into the body of a single slide within an existing powerpoint template that I've created. My problem is that I'm not sure how to correctly position these graphs so that they are side by side by side. I've been trying to think of a way I can go about this and I've been trying to work out a For statement that increases the graph position with each graph.

My most recent attempt:

On Error Resume Next
    Set PowerPointApp = GetObject(class:="PowerPoint.Application")
    If PowerPointApp Is Nothing Then Set PowerPointApp = CreateObject(class:="PowerPoint.Application")
    On Error GoTo 0
    Application.ScreenUpdating = False
    Set myPresentation = PowerPointApp.Presentations.Open(Filename:="X:\xxx\yyy.pptx")
    
'For i = 1 To Worksheets("Graphs").ChartObjects.Count
'Set cht = Worksheets("Graphs").ChartObjects(i)

MySlideArrayc = Array(12)
MyRangeArrayc = Array(Worksheets("Graphs").ChartObjects("A"), Worksheets("Graphs").ChartObjects("B"), Worksheets("Graphs").ChartObjects("CC"))

For xc = LBound(MySlideArrayc) To UBound(MySlideArrayc)
    'Copy Excel Range
        MyRangeArrayb(xc).CopyPicture

    Set shpc = myPresentation.Slides(MySlideArrayc(xc)).Shapes.Paste

Next

Next xc
    



myPresentation.Slides(Worksheets("Graphs").ChartObjects("A")).ShapeRange.Left = 50
myPresentation.Slides(Worksheets("Graphs").ChartObjects("A")).ShapeRange.Top = 50


myPresentation.Slides(Worksheets("Graphs").ChartObjects("B")).ShapeRange.Left = 150
myPresentation.Slides(Worksheets("Graphs").ChartObjects("B")).ShapeRange.Top = 150
    
Else
myPresentation.Slides(Worksheets("Graphs").ChartObjects("CC")).ShapeRange.Left = 300
myPresentation.Slides(Worksheets("Graphs").ChartObjects("CC")).ShapeRange.Top = 300

End If

End Sub

Upvotes: 0

Views: 49

Answers (1)

FaneDuru
FaneDuru

Reputation: 42236

For one on top of the other, please try the next way:

myPresentation.Slides(Worksheets("Graphs").ChartObjects("A")).ShapeRange.Left = 50
myPresentation.Slides(Worksheets("Graphs").ChartObjects("A")).ShapeRange.Top = 50


myPresentation.Slides(Worksheets("Graphs").ChartObjects("B")).ShapeRange.Left = 50 
myPresentation.Slides(Worksheets("Graphs").ChartObjects("B")).ShapeRange.Top = 50 + _
     myPresentation.Slides(Worksheets("Graphs").ChartObjects("A")).ShapeRange.Height
    
myPresentation.Slides(Worksheets("Graphs").ChartObjects("CC")).ShapeRange.Left = 50 
myPresentation.Slides(Worksheets("Graphs").ChartObjects("CC")).ShapeRange.Top = 50 + _
    myPresentation.Slides(Worksheets("Graphs").ChartObjects("A")).ShapeRange.Height + _
    myPresentation.Slides(Worksheets("Graphs").ChartObjects("B")).ShapeRange.Height

For one near the other, please try the next way:

myPresentation.Slides(Worksheets("Graphs").ChartObjects("A")).ShapeRange.Left = 50
myPresentation.Slides(Worksheets("Graphs").ChartObjects("A")).ShapeRange.Top = 50

myPresentation.Slides(Worksheets("Graphs").ChartObjects("B")).ShapeRange.Left = 50 + _
    myPresentation.Slides(Worksheets("Graphs").ChartObjects("B")).ShapeRange.Width
myPresentation.Slides(Worksheets("Graphs").ChartObjects("B")).ShapeRange.Top = 50

myPresentation.Slides(Worksheets("Graphs").ChartObjects("CC")).ShapeRange.Top = 50     
myPresentation.Slides(Worksheets("Graphs").ChartObjects("CC")).ShapeRange.Left = 50 + _
    myPresentation.Slides(Worksheets("Graphs").ChartObjects("A")).ShapeRange.Width + _
    myPresentation.Slides(Worksheets("Graphs").ChartObjects("B")).ShapeRange.Width

Upvotes: 1

Related Questions