Vba SlideMaster的唯一标识符
虽然我意识到SlideMaster在给定的演示文稿中有一个唯一的名称,但我理解这是有缺陷的,但有没有一种方法可以唯一地识别用户不能触摸的主控器?或者,是否有一个与幻灯片的标签集合相当的,我可以将自己的ID存放在某个地方Vba SlideMaster的唯一标识符,vba,powerpoint,Vba,Powerpoint,虽然我意识到SlideMaster在给定的演示文稿中有一个唯一的名称,但我理解这是有缺陷的,但有没有一种方法可以唯一地识别用户不能触摸的主控器?或者,是否有一个与幻灯片的标签集合相当的,我可以将自己的ID存放在某个地方 对于PowerPoint 2003和/或2007。。。提前感谢。在PowerPoint 2007/2010中,您可以使用CustomXMLParts作为某种标记。下面是一个演示: Sub SetSlideMasterTag() Dim ap As Presentation
对于PowerPoint 2003和/或2007。。。提前感谢。在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。
我最初认为没有好的方法来保护SlideMaster名称不受用户的影响,因为它似乎很容易通过主视图提供。在2007年,这非常容易实现,如上所述:功能区的“视图”选项卡、幻灯片母版按钮、右键单击任何母版并重命名。与2003年几乎相同,在“视图菜单>母版>幻灯片母版”中,右键单击左侧缩略图列表中的相关母版,然后重命名
令人高兴的是,这并不是重命名主控形状,而是重命名设计。当涉及到这两个对象时,Ppt对象模型不是很简单;每个母版显然都是设计的父版,但出于所有目的,它们都是1对1使用的,并且每个母版都将另一个作为属性公开:SlideMaster.design仅用于活动的幻灯片母版或design.SlideMaster至少就幻灯片母版而言,我不与其他三个母版合作,因此在这里无法与它们进行交流。当用户执行上述一系列步骤时,等效的vba是myDesign.Name=SomeNewName,而不是mySlideMaster.Name=SomeNewName。主人的名字不受影响;同样,如果在VBA中执行mySlideMaster.Name=SomeNewVBAName,则用户可能选择的相应设计名称将保持不变。谢谢。不幸的是,我需要一个在2007年之前也能工作的解决方案,但是您在这里描述的OpenXML方向也是一个信息丰富的帖子,这对未来是一个好兆头。不过,我认为我实际上可以使用SlideMaster.Name属性,我稍后有时间会详细解释。啊,你说的是PowerPoint 2003和/或2007,所以我认为只使用2007就可以了。SlideMaster.Name完全可以由最终用户更改,但是如果你愿意冒99%以上的用户不知道如何更改的风险,那么使用它应该没问题。用户如何更改SlideMaster.Name?@downwitch:如果他们知道自己在做什么,那就很容易了。下面是2007年的一个例子。转到“视图”选项卡,然后单击幻灯片母版。确保将最上面的幻灯片选为大幻灯片。然后单击重命名。这三个步骤很简单。事实上,没有。我花了很长时间才发布了这篇文章,但我在下面提到了这一点。