+ Reply to Thread
Results 1 to 4 of 4

macro for excel and powerpoint

Hybrid View

  1. #1
    Registered User
    Join Date
    06-29-2007
    Posts
    18

    macro for excel and powerpoint

    Hi,

    Is it possible to build a macro that copies charts from excel and paste them into a powerpoint file ? If yes, how.

    any help is greatly appreciated
    thx
    marius

  2. #2
    Forum Expert mrice's Avatar
    Join Date
    06-22-2004
    Location
    Surrey, England
    MS-Off Ver
    Excel 2013
    Posts
    4,967
    You need to make a reference to the Powerpoint object library in the VBA editor. This then exposes to Powerpoint objects to Excel for manipulation.

    A quick way of writing such a macro is to record the macro for slide creation in Powerpoint and then copy this code into Excel. By creating a PowerPoint object and using this to prefix the objects recorded should give you what you want.

  3. #3
    Registered User
    Join Date
    11-25-2007
    Posts
    46

    Copy to powerpoint

    I found this just the other night. As mentioned you need to give the macro the reference to the Powerpoint libraries. See note in comments, in the Visual Basic editor select Tools, then Reference and then scroll down the list until you find "Microsoft Powerpoint....".

    You also have to provide the plot number to copy, this example it was plot #2 on the page. I have only been using for a few days, but working fine for me.

    You call this from your macro with the line below

    Copy_Paste_to_PowerPoint

    Hope this works for you

    Sub Copy_Paste_to_PowerPoint()
         
         'Requires a reference to the Microsoft PowerPoint Library via the Tools - Reference menu in the VBE
        Dim ppApp As PowerPoint.Application
        Dim ppSlide As PowerPoint.Slide
         
         'Original code sourced from Jon Peltier http://peltiertech.com/Excel/XL_PPT.html
         'This code developed at http://oldlook.experts-exchange.com:8080/Applications/MS_Office/Excel/Q_21337053.html
         
        Dim SheetName As String
        Dim TestRange As Range
        Dim TestSheet As Worksheet
        Dim TestChart As ChartObject
         
        Dim PasteChart As Boolean
        Dim PasteChartLink As Boolean
        Dim ChartNumber As Long
         
        Dim PasteRange As Boolean
        Dim RangePasteType As String
        Dim RangeName As String
        Dim AddSlidesToEnd As Boolean
         
         'Parameters
         
         'SheetName           - name of sheet in Excel that contains the range or chart to copy
         
         'PasteChart          -If True then routine will  copy and paste a chart
         'PasteChartLink      -If True then Routine will paste chart with Link; if = False then paste chart no link
         'ChartNumber         -Chart Object Number
         '
         'PasteRange          - If True then Routine will copy and Paste a range
         'RangePasteType      - Paste as Picture linked or unlinked, "HTML" or "Picture". See routine below for exact values
         'RangeName           - Address or name of range to copy; "B3:G9" "MyRange"
         'AddSlidesToEnd      - If True then appednd slides to end of presentation and paste.  If False then paste on current slide.
         
         'use active sheet. This can be a direct sheet name
        SheetName = ActiveSheet.Name
         
         'Setting PasteRange to True means that Chart Option will not be used
        PasteRange = False
        RangeName = "A1:S12"
        RangePasteType = "HTML"
        RangeLink = True
         
        PasteChart = True
        PasteChartLink = False
        ChartNumber = 2
         
        AddSlidesToEnd = True
         
         
         'Error testing
        On Error Resume Next
        Set TestSheet = Sheets(SheetName)
        Set TestRange = Sheets(SheetName).Range(RangeName)
        Set TestChart = Sheets(SheetName).ChartObjects(ChartNumber)
        On Error GoTo 0
         
        If TestSheet Is Nothing Then
            MsgBox "Sheet " & SheetName & " does not exist. Macro will exit", vbCritical
            Exit Sub
        End If
         
        If PasteRange And TestRange Is Nothing Then
            MsgBox "Range " & RangeName & " does not exist. Macro will exit", vbCritical
            Exit Sub
        End If
         
        If PasteRange = False And PasteChart And TestChart Is Nothing Then
            MsgBox "Chart " & ChartNumber & " does not exist. Macro will exit", vbCritical
            Exit Sub
        End If
         
         
         'Look for existing instance
        On Error Resume Next
        Set ppApp = GetObject(, "PowerPoint.Application")
        On Error GoTo 0
         
         'Create new instance if no instance exists
        If ppApp Is Nothing Then Set ppApp = New PowerPoint.Application
         'Add a presentation if none exists
        If ppApp.Presentations.Count = 0 Then ppApp.Presentations.Add
         
         'Make the instance visible
        ppApp.Visible = True
         
         'Check that a slide exits, if it doesn't add 1 slide. Else use the last slide for the paste operation
        If ppApp.ActivePresentation.Slides.Count = 0 Then
            Set ppSlide = ppApp.ActivePresentation.Slides.Add(1, ppLayoutBlank)
        Else
            If AddSlidesToEnd Then
                 'Appends slides to end of presentation and makes last slide active
                ppApp.ActivePresentation.Slides.Add ppApp.ActivePresentation.Slides.Count + 1, ppLayoutBlank
                ppApp.ActiveWindow.View.GotoSlide ppApp.ActivePresentation.Slides.Count
                Set ppSlide = ppApp.ActivePresentation.Slides(ppApp.ActivePresentation.Slides.Count)
            Else
                 'Sets current slide to active slide
                Set ppSlide = ppApp.ActiveWindow.View.Slide
            End If
        End If
         
         'Options for Copy & Paste Ranges and Charts
        If PasteRange = True Then
             'Options for Copy & Paste Ranges
            If RangePasteType = "Picture" Then
                 'Paste Range as Picture
                Worksheets(SheetName).Range(RangeName).Copy
                ppSlide.Shapes.PasteSpecial(ppPasteDefault, link:=RangeLink).Select
            Else
                 'Paste Range as HTML
                Worksheets(SheetName).Range(RangeName).Copy
                ppSlide.Shapes.PasteSpecial(ppPasteHTML, link:=RangeLink).Select
            End If
        Else
             'Options for Copy and Paste Charts
            Worksheets(SheetName).Activate
            ActiveSheet.ChartObjects(ChartNumber).Select
            If PasteChartLink = True Then
                 'Copy & Paste Chart Linked
                ActiveChart.ChartArea.Copy
                ppSlide.Shapes.PasteSpecial(link:=True).Select
            Else
                 'Copy & Paste Chart Not Linked
                ActiveChart.CopyPicture Appearance:=xlScreen, Size:=xlScreen, Format:=xlPicture
                ppSlide.Shapes.Paste.Select
            End If
        End If
         
         'Center pasted object in the slide
        ppApp.ActiveWindow.Selection.ShapeRange.Align msoAlignCenters, True
        ppApp.ActiveWindow.Selection.ShapeRange.Align msoAlignMiddles, True
         
        AppActivate ("Microsoft PowerPoint")
        Set ppSlide = Nothing
        Set ppApp = Nothing
         
    End Sub

  4. #4
    Registered User
    Join Date
    06-29-2007
    Posts
    18

    macro for both xls and ppt

    Thank you so much.
    Sorry it took me so long to answer you.
    mariusescu

+ Reply to Thread

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts

Search Engine Friendly URLs by vBSEO 3.6.0 RC 1