出于自动化目的,我已将对象名称分配给 2007 Powerpoint 文件中的对象。我在另一台装有 office 2003 的机器上运行了自动化代码,发现对象名称在那里动态变化,因此自动化代码会引发错误。
我尝试使用 VBA 在该机器中再次重命名对象,并且它在调试时工作。但是当我重新运行自动化代码时会出现错误。
这是两个版本之间的兼容性问题还是其他问题?
出于自动化目的,我已将对象名称分配给 2007 Powerpoint 文件中的对象。我在另一台装有 office 2003 的机器上运行了自动化代码,发现对象名称在那里动态变化,因此自动化代码会引发错误。
我尝试使用 VBA 在该机器中再次重命名对象,并且它在调试时工作。但是当我重新运行自动化代码时会出现错误。
这是两个版本之间的兼容性问题还是其他问题?
那是我对不同版本的 Word 的问题。通常,早期版本可能不支持 PowerPoint 最高版本的代码。但有时代码可以工作,但它所引用的方法可能会导致问题。
我建议使用后期绑定(...作为对象)来解决问题
用一个例子进行修订:
不同之处在于您在运行时将对象库绑定到代码中。您不使用工具参考。类似的东西:
Sub ppt()
Dim olApp As Object
Set olApp = CreateObject("PowerPoint.Application")
End Sub
“对象名称”是指形状名称吗?即形状的 .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 等。