SlideMaster的唯一标识符

时间:2010-10-28 18:45:31

标签: powerpoint powerpoint-vba

虽然我意识到SlideMaster在给定的演示文稿中有一个唯一的名称(虽然我知道这是错误的),有没有办法唯一地识别用户无法触及的母版?或者,是否有一个等同于Slide的标签集合,在某个地方我可以存储我自己的ID?

对于PowerPoint 2003和/或2007 ...提前致谢。

2 个答案:

答案 0 :(得分:0)

在PowerPoint 2007/2010中,您可以使用CustomXMLParts作为标记的种类。这是一个演示:

Sub SetSlideMasterTag()
    Dim ap As Presentation
    Set ap = ActivePresentation
    ''#------------------------
    Dim slideMasterCustomerData As CustomerData
    Set slideMasterCustomerData = ap.SlideMaster.CustomerData
    ''#------------------------
    Dim slideMasterCustomXMLPart As CustomXMLPart
    Set slideMasterCustomXMLPart = slideMasterCustomerData.Add
    slideMasterCustomXMLPart.LoadXML ("<Tag><Item>SlideMaster</Item></Tag>")
    ''#------------------------
    Dim slideMasterTag As String
    slideMasterTag = slideMasterCustomXMLPart.Id
    ''#------------------------
    Debug.Print slideMasterTag
    Debug.Print ap.CustomXMLParts.SelectByID(slideMasterTag).XML
    ''#------------------------
    ap.CustomDocumentProperties.Add Name:="SlideMasterTag", LinkToContent:=False, _
        Type:=msoPropertyTypeString, Value:=slideMasterTag
End Sub
Sub RetrieveSlideMasterTag()
    Dim ap As Presentation
    Set ap = ActivePresentation
    ''#------------------------
    Dim slideMasterTag As String
    slideMasterTag = ap.CustomDocumentProperties.Item("SlideMasterTag").Value
    Debug.Print slideMasterTag
    ''# Is this the right slide master?
    If Not ap.SlideMaster.CustomerData(slideMasterTag) Is Nothing Then
        Debug.Print "Found you, you little bugger!"
    End If
End Sub

要记住几件事:

  • 你必须保持 会话之间slideMasterTag。 可能最好的地方是这样做 在CustomDocumentProperties中, 因此RetrieveSlideMasterTag 常规。这是不太可能的 最终用户会进入这里。
    • 如果你不想这样做的话 CustomDocumentProperties,你愿意 只需要查询所有 CustomXMLParts使用XPath为您的 XML。
  • 上面的代码没有任何错误 或验证检查。你需要 看到创建代码以确保 还没有一个叫做的标签 slideMasterTag

答案 1 :(得分:0)

我最初认为没有好的方法来保护用户的SlideMaster名称,因为它似乎很容易通过主视图提供。在2007年,这很容易实现,如上所示:功能区的“视图”选项卡,“幻灯片母版”按钮,右键单击任何母版,然后重命名。在2003年几乎相同,查看菜单&gt;主人&gt;单击幻灯片母版,右键单击左侧缩略图列表中的相关母版,重命名。

幸运的是,这并没有重命名 master ,而是重命名 design 。当涉及到这两个对象时,Ppt对象模型并不是非常简单;每个主人显然都是设计的父母,但是出于所有意图和目的,他们被一对一地使用,并且每个人都将另一个作为财产公开:SlideMaster.Design(仅适用于“活跃”幻灯片母版)或Design.SlideMaster(至少就幻灯片主人而言 - 我不与其他三人合作,所以不能在这里真正与他们交谈)。当用户按照上面详述的一系列步骤操作时,等效的vba为myDesign.Name = "SomeNewName",而不是mySlideMaster.Name = "SomeNewName"。主人的名字不受影响;同样,如果在VBA中我执行mySlideMaster.Name = "SomeNewVBAName",用户可能选择的相应设计名称保持不变。