【问题标题】:Excel to PPT Automation VBA Code Written in Excel 2007 is not working in Excel 2013在 Excel 2007 中编写的 Excel 到 PPT 自动化 VBA 代码在 Excel 2013 中不起作用
【发布时间】:2014-08-19 11:22:00
【问题描述】:

我已经编写了一个 VBA 代码,用于在 Office 2007 中将粘贴图表从 Excel 复制到 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

【问题讨论】:

  • 哪一行报错了? (请调试 F8 直到收到错误)
  • 我猜你还没有添加 Microsoft PowerPoint 14.0 对象库的引用...
  • @Captain 谢谢你的回复..我已经激活了 Microsoft PowerPoint 14.0 对象库,现在可以通过 vba 至少打开 powerpoint ..但是我现在得到的错误是在线: PPTFile.Slides(1).Shapes.Paste.Select(#Error:运行时错误 424 - 需要对象)。相同的代码在 2007 年完美运行,请您帮忙解决这个问题...
  • 嗨 - 我,至少在您有 SlideNum=1 并选择它的地方出现错误,但随后引用了幻灯片 2 上的形状范围! (第三张图表)。希望这会有所帮助!
  • 试试 www.pptxbuilder.com

标签: excel vba


【解决方案1】:

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

Dim PPTShape as PowerPoint.Shape

因为 Excel 对象模型中没有 PowerPoint 这样的类。

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

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

【讨论】:

  • 感谢您的回复大卫..我已经激活了 Microsoft PowerPoint 14.0 对象库,现在可以通过 vba 至少打开 powerpoint..但是我现在遇到的错误在线:PPTFile .Slides(1).Shapes.Paste.Select(#Error:运行时错误 424 - 需要对象)。相同的代码在 office 2007 中完美运行,请您在 office 2013 中提供帮助...
  • 我没有要测试的 2013 年,但我会尝试:Set PPTShape = PPTFile.Slides(1).Shapes.Paste(省略 .Select,因为我认为这是不必要的),然后将下一行更改为 PPTShape.Top = 37 和 @987654327 @等
猜你喜欢
  • 1970-01-01
  • 2010-09-16
  • 2013-03-01
  • 1970-01-01
  • 2020-01-21
  • 1970-01-01
  • 2018-08-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多