Vba Office 2007和2003之间对象名称的更改

Vba Office 2007和2003之间对象名称的更改,vba,powerpoint,powerpoint-2007,Vba,Powerpoint,Powerpoint 2007,为了实现自动化,我为2007年Powerpoint文件中的对象指定了对象名称。我在另一台有Office2003的机器上运行了自动代码,发现对象名称在那里动态变化,因此自动代码抛出了一个错误 我尝试在那台机器上使用VBA再次重命名对象,它在调试时工作。但是当我重新运行自动化代码时,会出现错误 这是两个版本之间的兼容性问题还是其他问题?这是我对Word不同版本的问题。通常,早期版本可能不支持PowerPoint最高版本的代码。但有时代码是有效的,但它所引用的方法可能会导致问题 我建议使用后期绑定(…

为了实现自动化,我为2007年Powerpoint文件中的对象指定了对象名称。我在另一台有Office2003的机器上运行了自动代码,发现对象名称在那里动态变化,因此自动代码抛出了一个错误

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


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

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

我建议使用后期绑定(…作为对象)来解决这个问题

举例说明:

不同之处在于在运行时用代码绑定对象库。您不使用工具引用。诸如此类:

Sub ppt()

    Dim olApp As Object

    Set olApp = CreateObject("PowerPoint.Application")

End Sub
“对象名称”是指形状名称吗?即形状的名称属性?这看起来确实是辆马车

考虑在需要处理的形状上使用标记。例如,假设在oSh中引用您的形状,而不是使用oSh.Name=“记住我”,请执行以下操作:

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被声明为对象而不是幻灯片,因此您可以传递函数幻灯片、母版、布局等。

您能否帮助我了解您提到的后期绑定概念?参考一下可能会有所帮助。该方法还能确保代码正常工作吗?我已经编辑了我的答案,请记住区别在于对象的创建(CreateObject(“PowerPoint.Application”))形状名称可能会更改的原因:PPT 2003无法从2007年开始打开PPTX文件,除非您已安装(我认为称之为)兼容性工具包,它执行从PPTX到PPT格式的实时转换。它可能正在创建所有新的形状/对象,并且在创建时可能不会保留原始形状名称。