2010-10-28 158 views
0

雖然我知道SlideMaster在給定的演示文稿中有一個唯一的名稱(雖然我理解這是bug),但有沒有一種方法可以唯一標識用戶無法觸摸的主?或者,是否有與Slide的Tags集合等價的地方,我可以隱藏自己的ID?SlideMaster的唯一標識符

對於PowerPoint 2003和/或2007 ...提前致謝。

回答

0

我最初認爲沒有好的方法來保護用戶的SlideMaster名稱,因爲它似乎很容易通過主視圖提供。在2007年,這很容易實現,如上所示:功能區的「查看」選項卡,「幻燈片母版」按鈕,右鍵單擊任何母版,然後重命名。 2003年幾乎相同,「查看」菜單>「主控」>「幻燈片母版」,在左側縮略圖列表中右鍵單擊相關主控制器,重命名。

令人高興的事實是,這並不重命名而是設計。當涉及到這兩個對象時,Ppt對象模型並不是非常簡單;每個主人顯然都是設計的父母,但是出於所有意圖和目的,他們都是一對一聘用,並且每個人都將其作爲屬性公開:SlideMaster.Design(僅適用於「活躍」幻燈片母版)或Design.SlideMaster(在至少就主人而言 - 我不與其他三人一起工作,所以在這裏不能與他們說話)。當用戶按照上面詳述的一系列步驟時,等效的vba是myDesign.Name = "SomeNewName",而不是mySlideMaster.Name = "SomeNewName"。主人的名字不受影響;同樣,如果在VBA中執行mySlideMaster.Name = "SomeNewVBAName",則用戶可能選擇的相應設計名稱保持不變。

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,你會 只需要查詢使用XPath所有 CustomXMLParts您 XML。
  • 上面的代碼不會做任何錯誤 或驗證檢查。您需要 才能看到創建代碼,以確保 還沒有一個名爲 slideMasterTag的標記。
+0

謝謝你。不幸的是,我需要一個同樣適用於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

+0

啊,你說過* PowerPoint 2003和/或2007 *,所以我假設2007年就會沒事的。 'SlideMaster。名稱可由最終用戶定義變更,但如果您願意承擔超過99%的用戶不知道如何更改該風險的風險,則應該可以使用它。 – 2010-11-01 18:50:06

+0

用戶如何更改SlideMaster.Name? – downwitch 2010-11-19 14:31:17