tags:

views:

13

answers:

1

Hi all. While I realize that a SlideMaster has a unique name in a given presentation (though I understand this to be buggy), is there a way to uniquely identify a master that a user can't touch? Alternatively, is there an equivalent to the Slide's Tags collection, somewhere I can stash my own ID?

For PowerPoint 2003 and/or 2007... Thanks in advance.

A: 

In PowerPoint 2007/2010 you can use CustomXMLParts as sort of a tag. Here's a demo:

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

A couple of things to remember:

  • You have to maintain the slideMasterTag between sessions. Probably the best place to do this is in the CustomDocumentProperties, hence the RetrieveSlideMasterTag routine. It is highly unlikely that an end user would go into here.
    • If you didn't want to do add this to CustomDocumentProperties, you would just need to query all CustomXMLParts using XPath for your XML.
  • The code above doesn't do any error or validation checking. You'll need to see create code to ensure that there is not already a tag called slideMasterTag.
Otaku