使用excel VBA在公司提供的默认PowerPoint文件上创建PowerPoint演示文稿

时间:2017-08-10 09:21:14

标签: excel-vba vba excel

我正在尝试使用VBA从excel创建一个power point演示文稿。所以当我执行它时总是创建多个演示幻灯片。与excel表中的图表数量精确相同。请帮帮我。

Sub CreatePowerPoint()

    Dim newPowerPoint As PowerPoint.Application
    Dim activeSlide As PowerPoint.Slide
    Dim cht As Excel.ChartObject


    On Error Resume Next
    Set newPowerPoint = GetObject(, "PowerPoint.Application")

    On Error GoTo 0

'create a new PowerPoint
    If newPowerPoint Is Nothing Then
        Set newPowerPoint = New PowerPoint.Application

    End If
'Making 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.Presentations.Open "C:\MCM DECK\Alstom_PPT_Template.potx" ' Problem lies here

        newPowerPoint.ActivePresentation.PageSetup.SlideSize = ppSlideSizeOnScreen16x9
        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)

        cht.Select
        ActiveChart.ChartArea.Copy
        activeSlide.Shapes.PasteSpecial(DataType:=ppPasteMetafilePicture).Select


        activeSlide.Shapes(1).TextFrame.TextRange.Text = cht.Chart.ChartTitle.Text

        newPowerPoint.ActiveWindow.Selection.ShapeRange.Left = 15
        newPowerPoint.ActiveWindow.Selection.ShapeRange.Top = 125

        activeSlide.Shapes(2).Width = 200
        activeSlide.Shapes(2).Left = 505



'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

0 个答案:

没有答案