title: Copy Charts from Excel to PPT using VBA Macro
body: <p>I want to write a VBA Macro which copies few charts from Excel and pastes it in different  slides in an already created PowerPoint Presentation( the PPT is not open, the code should be able to do that).</p>
  
  <p>I have tried doing that but it always gives some or the other error like  "ActiveX component does not exist". I also read many solutions to this problem but all of them seem too messy.
  Can someone suggest a clear and clean method to do that? It would be very helpful!</p>
  
  <p><em><strong>The Macro will be in Excel</em></strong>. Please find the code below:</p>
  
  <pre><code>Sub ExcelToPres()
  Dim PPT As Object
  Set PPT = CreateObject("PowerPoint.Application")
  PPT.Visible = True
  PPT.Presentations.Open Filename:="path"
  copy_chart "sheet_name", 2  ' Name of the sheet to copy graph and slide number the graph is to be pasted in
  PPT.Save
  PPT.Close
  End Sub
  
  
  Public Function copy_chart(sheet, slide)
  
  
  Dim PPApp As Object
  Dim PPPres As Object
  Dim PPSlide As Object
  
  Set PPApp = CreateObject("Powerpoint.Application")
  ***Set PPPres = CreateObject("Powerpoint.Presentation")***
  Set PPSlide = CreateObject("Powerpoint.Slide")
  
  Set PPApp = GetObject(, "Powerpoint.Application")
  Set PPPres = PPApp.ActivePresentation
  PPApp.ActiveWindow.ViewType = ppViewSlide
  PPApp.ActiveWindow.View.GotoSlide (slide)
  
  Worksheets(sheet).Activate
  ActiveSheet.ChartObjects("Chart 1").Chart.CopyPicture _
  Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture
  
  
  'PPApp.ActiveWindow.View.GotoSlide PPSlide.SlideIndex
  
  Set PPSlide = PPPres.Slides(PPApp.ActiveWindow.Selection.SlideRange.SlideIndex)
  With PPSlide
  ' paste and select the chart picture
  .Shapes.Paste.Select
  ' align the chart
  PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
  PPApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
  End With
  
  ' Clean up
  Set PPSlide = Nothing
  Set PPPres = Nothing
  Set PPApp = Nothing
  
  End Function
  </code></pre>
  
  <p>The highlighted line is giving the error: " ActiveX Component cannot create object "
  Thanks!!</p>