【问题标题】:Object name changes between Office 2007 and 2003Office 2007 和 2003 之间的对象名称更改
【发布时间】:2012-05-21 03:07:59
【问题描述】:

出于自动化目的,我已将对象名称分配给 2007 Powerpoint 文件中的对象。我在另一台装有 office 2003 的机器上运行自动化代码,发现对象名称在那里动态变化,因此自动化代码会引发错误。

我尝试使用 VBA 再次重命名该机器中的对象,它在调试时工作。但是当我重新运行自动化代码时会抛出错误。

这是两个版本之间的兼容性问题还是其他问题?

【问题讨论】:

  • 关于形状名称为何会改变的想法:PPT 2003 无法打开 2007 年以来的 PPTX 文件,除非您已安装(我认为是所谓的)兼容性套件,该套件执行从 PPTX 到 PPT 格式的即时转换。它可能正在创建所有新形状/对象,并且在这样做时可能不会保留原始形状名称。

标签: vba powerpoint powerpoint-2007


【解决方案1】:

这是我对不同版本的 Word 的问题。通常,早期版本可能不支持 PowerPoint 最高版本的代码。但有时代码可以工作,但它所引用的方法可能会导致问题。

我推荐使用后期绑定(... As Object)来解决问题

举例修改:

不同之处在于您在运行时将对象库绑定到代码中。您不使用工具参考。类似的东西:

Sub ppt()

    Dim olApp As Object

    Set olApp = CreateObject("PowerPoint.Application")

End Sub

【讨论】:

  • 您能帮我解决您提到的后期绑定概念吗?对它的一些参考会有所帮助。该方法还可以确保代码有效吗?
  • 我已经编辑了我的答案,记住区别在于对象的创建( CreateObject("PowerPoint.Application") )
【解决方案2】:

“对象名称”是指形状名称吗?即形状的 .Name 属性?这似乎有问题。

考虑在您需要处理的形状上使用标签。例如,假设在 oSh 中引用了您的形状,而不是使用 oSh.Name = "Remember me",请执行以下操作:

oSh.Tags.Add "ShapeName","RememberMe"

然后,当您需要获取对形状的引用时,请使用如下函数:

Function ShapeNamed(oSl as Object, sName as string) as Shape
  Dim oSh as Shape
  For Each oSh in oSl.Shapes
    If oSh.Tags("ShapeName") = sName Then
      Set ShapeNamed = oSh
      Exit Function
    End If
  Next
End Function

oSl 被声明为 Object 而不是 Slide,因此您可以传递 Slides、Masters、Layouts 等函数。

【讨论】:

    猜你喜欢
    • 2011-01-24
    • 1970-01-01
    • 2011-05-05
    • 2010-11-22
    • 2010-10-20
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    相关资源
    最近更新 更多