从Excel数据,图表,注释通过VBA生成PowerPoint自动生成

时间:2015-02-17 08:33:29

标签: excel-vba powerpoint-vba powerpoint-2010 vba excel

我想要实现的是通过VBA在Excel中使用数据,图表和注释制作自动PowerPointPres。

我有两件事无法做到:

  1. 我需要在PPP页面上放置4个图表,而不是每页1个图表
  2. 我需要保留源格式,而不是将图表粘贴为图片。
  3. 请问有人帮忙解决一些问题吗?

    真的很感激!

        Sub CreatePowerPoint()
    
     'Add a reference to the Microsoft PowerPoint Library by:
    
        '1. Go to Tools in the VBA menu    
        '2. Click on Reference    
        '3. Scroll down to Microsoft PowerPoint X.0 Object Library, check the box, and press Okay
    
        'First we declare the variables we will be using
    
            Dim newPowerPoint As PowerPoint.Application
            Dim activeSlide As PowerPoint.Slide
            Dim cht As Excel.ChartObject
    
         'Look for existing instance
            On Error Resume Next
            Set newPowerPoint = GetObject(, "PowerPoint.Application")
            On Error GoTo 0
    
        'Let's create a new PowerPoint
            If newPowerPoint Is Nothing Then
                Set newPowerPoint = New PowerPoint.Application
            End If
        'Make a presentation in PowerPoint
            If newPowerPoint.Presentations.Count = 0 Then
                newPowerPoint.Presentations.Add
            End If
    
        'Show the PowerPoint
            newPowerPoint.Visible = True
    
        'Loop through each chart in the Excel worksheet and paste them into the PowerPoint
            For Each cht In ActiveSheet.ChartObjects
    
            'Add a new slide where we will paste the chart
                newPowerPoint.ActivePresentation.Slides.Add newPowerPoint.ActivePresentation.Slides.Count + 1, ppLayoutText
                newPowerPoint.ActiveWindow.View.GotoSlide newPowerPoint.ActivePresentation.Slides.Count
                Set activeSlide = newPowerPoint.ActivePresentation.Slides(newPowerPoint.ActivePresentation.Slides.Count)
    
            'Copy the chart and paste it into the PowerPoint as a Metafile Picture
                cht.Select
                ActiveChart.ChartArea.Copy
                activeSlide.Shapes.PasteSpecial(DataType:=ppPasteMetafilePicture).Select
    
            'Set the title of the slide the same as the title of the chart
                activeSlide.Shapes(1).TextFrame.TextRange.Text = cht.Chart.ChartTitle.Text
    
            'Adjust the positioning of the Chart on Powerpoint Slide
                newPowerPoint.ActiveWindow.Selection.ShapeRange.Left = 15
                newPowerPoint.ActiveWindow.Selection.ShapeRange.Top = 125
    
                activeSlide.Shapes(2).Width = 200
                activeSlide.Shapes(2).Left = 505
    
            'If the chart is the "US" consumption chart, then enter the appropriate comments
                If InStr(activeSlide.Shapes(1).TextFrame.TextRange.Text, "US") Then
                    activeSlide.Shapes(2).TextFrame.TextRange.Text = Range("J7").Value & vbNewLine
                    activeSlide.Shapes(2).TextFrame.TextRange.InsertAfter (Range("J8").Value & vbNewLine)
            'Else if the chart is the "Renewable" consumption chart, then enter the appropriate comments
                ElseIf InStr(activeSlide.Shapes(1).TextFrame.TextRange.Text, "Renewable") Then
                    activeSlide.Shapes(2).TextFrame.TextRange.Text = Range("J27").Value & vbNewLine
                    activeSlide.Shapes(2).TextFrame.TextRange.InsertAfter (Range("J28").Value & vbNewLine)
                    activeSlide.Shapes(2).TextFrame.TextRange.InsertAfter (Range("J29").Value & vbNewLine)
                End If
    
            'Now let's change the font size of the callouts box
                activeSlide.Shapes(2).TextFrame.TextRange.Font.Size = 16
    
            Next
    
        AppActivate ("Microsoft PowerPoint")
        Set activeSlide = Nothing
        Set newPowerPoint = Nothing
    
    End Sub
    

1 个答案:

答案 0 :(得分:1)

我想你可以通过将幻灯片创建部分移出循环并将其第一部分改为看起来像这样来实现这一点:

    'Add a new slide where we will paste the chart
    newPowerPoint.ActivePresentation.Slides.Add newPowerPoint.ActivePresentation.Slides.Count + 1, ppLayoutText
    newPowerPoint.ActiveWindow.View.GotoSlide newPowerPoint.ActivePresentation.Slides.Count
    Set activeSlide = newPowerPoint.ActivePresentation.Slides(newPowerPoint.ActivePresentation.Slides.Count)

'Loop through each chart in the Excel worksheet and paste them into the PowerPoint
    For Each cht In ActiveSheet.ChartObjects

        Dim i As Integer
        i = i + 1

    'Copy the chart and paste it
        cht.Select
        ActiveChart.ChartArea.Copy
        activeSlide.Shapes.PasteSpecial(DataType:=ppPasteDefault).Select

    'Set the title of the slide the same as the title of the chart
    If cht.Chart.HasTitle = True Then
        activeSlide.Shapes(1).TextFrame.TextRange.Text = cht.Chart.ChartTitle.Text
    End If

    'Adjust the positioning of the Chart on Powerpoint Slide
    If i = 1 Then
        newPowerPoint.ActiveWindow.Selection.ShapeRange.Left = 5
        newPowerPoint.ActiveWindow.Selection.ShapeRange.Top = 100

        ElseIf i = 2 Then
        newPowerPoint.ActiveWindow.Selection.ShapeRange.Left = 350
        newPowerPoint.ActiveWindow.Selection.ShapeRange.Top = 100

        ElseIf i = 3 Then
        newPowerPoint.ActiveWindow.Selection.ShapeRange.Left = 5
        newPowerPoint.ActiveWindow.Selection.ShapeRange.Top = 325

        Else
        newPowerPoint.ActiveWindow.Selection.ShapeRange.Left = 350
        newPowerPoint.ActiveWindow.Selection.ShapeRange.Top = 325
    End If

然后,你可能需要做一些调整。