Excel到PPT自动化VBA代码Excel 2007中编写的代码在Excel 2013中不起作用

时间:2014-08-19 11:22:01

标签: excel excel-vba vba

我编写了一个VBA代码,用于将粘贴图表从Excel复制到Office 2007中的ppt,但代码在Office 2013中不起作用。它出错:

  

"编译错误:用户定义的类型未定义"和"需要对象(错误424)"。

代码:

Sub ExcelToPres() 
Dim PPT As Object 'As PowerPoint.Application 
Dim PPTFile As PowerPoint.Presentation 
Dim PPTShape As PowerPoint.Shape 
Dim SlideNum As Integer

Set PPT = CreateObject("PowerPoint.Application") 
PPT.Visible = True 
PPT.Presentations.Open 
Filename:="C:\Users\PS\Desktop\Work\Test - Blank.pptx"

Set PPTFile = PPT.ActivePresentation 
PPT.ActiveWindow.ViewType = ppViewSlide

        SlideNum = 1
        PPTFile.Slides(SlideNum).Select
        Sheets("Charts").ChartObjects("Chart 1").CopyPicture
        PPTFile.Slides(1).Shapes.Paste.Select
         PPT.ActiveWindow.Selection.ShapeRange.Left = 37
         PPT.ActiveWindow.Selection.ShapeRange.Top = 127

        SlideNum = 1
        PPTFile.Slides(SlideNum).Select
        Sheets("Charts").ChartObjects("Chart 2").CopyPicture
        PPTFile.Slides(1).Shapes.Paste.Select
         PPT.ActiveWindow.Selection.ShapeRange.Left = 37
         PPT.ActiveWindow.Selection.ShapeRange.Top = 354

        SlideNum = 1
        PPTFile.Slides(SlideNum).Select
        Sheets("Charts").ChartObjects("Chart 3").CopyPicture
        PPTFile.Slides(2).Shapes.Paste.Select
         PPT.ActiveWindow.Selection.ShapeRange.Left = 37
         PPT.ActiveWindow.Selection.ShapeRange.Top = 127

        SlideNum = 1
        PPTFile.Slides(SlideNum).Select
        Sheets("Charts").ChartObjects("Chart 4").CopyPicture
        PPTFile.Slides(2).Shapes.Paste.Select
         PPT.ActiveWindow.Selection.ShapeRange.Left = 207
         PPT.ActiveWindow.Selection.ShapeRange.Top = 127

        SlideNum = 1
        PPTFile.Slides(SlideNum).Select
        ActiveWorkbook.Sheets("Charts").ChartObjects("Chart 5").CopyPicture
        PPTFile.Slides(2).Shapes.Paste.Select
         PPT.ActiveWindow.Selection.ShapeRange.Left = 442
         PPT.ActiveWindow.Selection.ShapeRange.Top = 127

    Set PPT = Nothing
    Set PPTFile = Nothing
    Set PPSlide = Nothing   End Sub

1 个答案:

答案 0 :(得分:1)

在这种情况下,424最明显的原因是您尚未启用对PowerPoint对象模型的引用。当您使用早期绑定时,这是绝对必需的:

Dim PPTShape as PowerPoint.Shape

因为Excel对象模型中没有此类PowerPoint

或者,使用后期绑定对象(如果您打算分发此宏/应用程序,可能会更好),例如您的应用程序对象:

Dim PPT as Object 
Dim PPTFile As Object
Dim PPTShape As Object