雖然我知道SlideMaster在給定的演示文稿中有一個唯一的名稱(雖然我理解這是bug),但有沒有一種方法可以唯一標識用戶無法觸摸的主?或者,是否有與Slide的Tags集合等價的地方,我可以隱藏自己的ID?SlideMaster的唯一標識符
對於PowerPoint 2003和/或2007 ...提前致謝。
雖然我知道SlideMaster在給定的演示文稿中有一個唯一的名稱(雖然我理解這是bug),但有沒有一種方法可以唯一標識用戶無法觸摸的主?或者,是否有與Slide的Tags集合等價的地方,我可以隱藏自己的ID?SlideMaster的唯一標識符
對於PowerPoint 2003和/或2007 ...提前致謝。
我最初認爲沒有好的方法來保護用戶的SlideMaster名稱,因爲它似乎很容易通過主視圖提供。在2007年,這很容易實現,如上所示:功能區的「查看」選項卡,「幻燈片母版」按鈕,右鍵單擊任何母版,然後重命名。 2003年幾乎相同,「查看」菜單>「主控」>「幻燈片母版」,在左側縮略圖列表中右鍵單擊相關主控制器,重命名。
令人高興的事實是,這並不重命名主而是設計。當涉及到這兩個對象時,Ppt對象模型並不是非常簡單;每個主人顯然都是設計的父母,但是出於所有意圖和目的,他們都是一對一聘用,並且每個人都將其作爲屬性公開:SlideMaster.Design
(僅適用於「活躍」幻燈片母版)或Design.SlideMaster
(在至少就主人而言 - 我不與其他三人一起工作,所以在這裏不能與他們說話)。當用戶按照上面詳述的一系列步驟時,等效的vba是myDesign.Name = "SomeNewName"
,而不是mySlideMaster.Name = "SomeNewName"
。主人的名字不受影響;同樣,如果在VBA中執行mySlideMaster.Name = "SomeNewVBAName"
,則用戶可能選擇的相應設計名稱保持不變。
在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
,你會 只需要查詢使用XPath所有 CustomXMLParts
您 XML。slideMasterTag
的標記。
謝謝你。不幸的是,我需要一個同樣適用於2007年以前的解決方案,但是您所描述的OpenXML方向(此處也是信息性的帖子http://blogs.msdn.com/b/brian_jones/archive/2009/03/05/how-to-assemble -multiple-powerpoint-decks.aspx)預示着未來。不過,我認爲我實際上可以使用SlideMaster.Name屬性,因爲稍後我會詳細解釋時間。 – downwitch 2010-11-01 18:38:07
啊,你說過* PowerPoint 2003和/或2007 *,所以我假設2007年就會沒事的。 'SlideMaster。名稱可由最終用戶定義變更,但如果您願意承擔超過99%的用戶不知道如何更改該風險的風險,則應該可以使用它。 – 2010-11-01 18:50:06
用戶如何更改SlideMaster.Name? – downwitch 2010-11-19 14:31:17