【问题标题】:VBA run time error 438VBA 运行时错误 438
【发布时间】:2017-11-13 09:44:31
【问题描述】:

我正在尝试编写代码以从 excel VBA 打开 PPTX 文件并更新 ppt 中的链接。

下面是我得到的代码,但是当代码试图更新链接时,我得到了

运行时错误 438 对象不支持此属性或方法

Sub kunal()

Dim PPObj As Object

Set PPObj = CreateObject("PowerPoint.application")

With PPObj      
    .Presentations.Add

    .Presentations.Open Filename:="Y:\Desktop\Month End\One_Shot\Template AVP Report Package\ABD-OME SDeeson.pptx"

    .Visible = True    
    .UpdateLinks    
    .Presentation.Save

    .Quit    
    Set PPObj = Nothing    
End With

End Sub

【问题讨论】:

  • 你在哪一行得到错误?
  • 欢迎来到 StackOverflow,Kunal。在我看来,出现此错误是因为您将PPObj 设置为Nothing,而您仍在With 语句中使用它。为什么不尝试将Set PPObj = NothingEnd With 行之后移动,看​​看是否能解决问题。

标签: vba excel powerpoint


【解决方案1】:

438 表示您正在尝试访问不存在的方法或对象的属性。因此,您需要一个表示对象而不是应用程序对象来更新链接。

试试这样:

Option Explicit

Sub kunal()

    Dim PPObj As Object
    Dim pptPresentation As Object

    Set PPObj = CreateObject("PowerPoint.application")
    Set pptPresentation = PPObj.presentations.Open("C:\test.pptx")

    With PPObj

        .presentations.Add

        .Visible = True
        pptPresentation.UpdateLinks
        pptPresentation.Save
        pptPresentation.Close

        .Quit
        'Set PPObj = Nothing - No need for this
    End With

End Sub

Application Object MSDN

Presentation Object MSDN

【讨论】:

  • 感谢您的代码。这对我真的很有帮助,也很愚蠢。我想再检查一件事。我是否也可以通过应用循环或其他东西对保存在同一位置的多个 ppt 做同样的事情。
  • 是的,您可以使用 F = Dir(direct, 7) '设置 f 等于第一个文件名 Do While F 在同一目录中打开、更新和关闭(保存)多个文件""
【解决方案2】:

首先,如果在下一行打开现有演示文稿,不知道为什么需要.Presentations.Add

第二.UpdateLinks 的行是Presentation 的属性,而不是PowerPoint.Application

代码

Option Explicit

Sub kunal()

Dim ppApp As Object
Dim ppPres As Object

Set ppApp = CreateObject("PowerPoint.application")

With ppApp
    .Visible = True

'    .Presentations.Add ' <-- not sure why you need to open a new Presentation ?
    Set ppPres = .Presentations.Open(Filename:="Y:\Desktop\Month End\One_Shot\Template AVP Report Package\ABD-OME SDeeson.pptx")

    ppPres.UpdateLinks
    ppPres.Save
    ppPres.Close

    .Quit
End With

Set ppPres = Nothing
Set ppApp = Nothing

End Sub

【讨论】:

  • 我的 PPTFAQ 网站上有一个页面可能会对此有所帮助:pptfaq.com/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多