2013-05-31 41 views
1

我有一個PPT插件,如果某個ViewType不被維護,可能會失敗。有沒有辦法在Powerpoint VBA中禁用CommandBar控件?

我沒有看到任何PPTEvent,我可以捕捉變化並阻止它(儘管如果這是可能的,請指教!)。所以我一直在玩Ribbon/CommandBars試圖禁用或隱藏與ViewType有關的某些控件。

我通過Id確定了控件,我試圖將它們的.Visible屬性設置爲False,或者替代爲.Enabled = False,但這兩者似乎都沒有任何影響。控件仍然可見,點擊它們仍然執行。

這個例子我會嘗試禁用Slide Sorter控件。這樣可以防止VBE從Execute開始,但是它確實不會而不是只要用戶仍然可以點擊它,仍然會執行按鈕的操作。

Sub DisableViewChange() 

    Dim cBar As CommandBar 
    Dim ctrl As CommandBarControl 

    Set cBar = CommandBars("View") 

    Set ctrl = cBar.FindControl(Id:=738) 
     ctrl.Visible = True 
     ctrl.Enabled = False 
    Set btn = ctrl 
     btn.Execute 



    Set cBar = Nothing 
    Set btn = Nothing 
    Set ctrl = Nothing 

End Sub 

更新,包括我想元素的圖片禁用/隱藏/刪除:

enter image description here

+0

您可以加入屏幕截圖呈現視圖類型和要關閉控制?我沒有運行PP的英文版本,而且更容易得到你的情況。 –

+0

@KazJaw查看上面的截圖,讓我知道如果這是足夠的信息。 –

+0

謝謝,現在讓我想想:) –

回答

0

上面的紅色建議非常有幫助。隨着一些(錯誤... lot)的試驗和錯誤,我能夠對功能區進行一些調整。我提出,希望這個答案,我的試錯將別人有用誰是XML同樣陌生:

我關閉,我一直在尋找禁用幾個命令,這是比較容易:

<commands> 
    <command idMso="ViewSlideSorterView" enabled="false"/> 
    <command idMso="ViewNotesPageView" enabled="false"/> 
    <command idMso="ViewSlideShowReadingView" enabled="false"/> 
    <command idMso="ViewSlideMasterView" enabled="false"/> 
    <command idMso="ViewHandoutMasterView" enabled="false"/> 
    <command idMso="ViewNotesMasterView" enabled="false"/> 
    <command idMso="WindowNew" enabled="false"/> 
</commands> 

由於我對XML感到焦慮,因此我決定將我的加載項命令從舊版CommandBar(在加載項選項卡組下)遷移到自定義功能區選項卡,因此該XML還包含新標籤的一個工作示例,它由一個組,一個菜單以及該菜單中的幾個按鈕組成。

這裏是包括殘疾人命令驗證的XML自定義選項卡菜單:

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui"> 
    <commands> 
     <command idMso="ViewSlideSorterView" enabled="false"/> 
     <command idMso="ViewNotesPageView" enabled="false"/> 
     <command idMso="ViewSlideShowReadingView" enabled="false"/> 
     <command idMso="ViewSlideMasterView" enabled="false"/> 
     <command idMso="ViewHandoutMasterView" enabled="false"/> 
     <command idMso="ViewNotesMasterView" enabled="false"/> 
     <command idMso="WindowNew" enabled="false"/> 
    </commands> 
    <ribbon startFromScratch="false"> 
     <tabs> 
      <tab idMso="TabView"> 
       <group idMso="GroupPresentationViews" visible="true"/> 
       <group idMso="GroupMasterViews" visible="true"/> 
      </tab> 
      <tab id="MyNewTab" label="My Tab Label"> 
       <group id="MyGroupMain" label="My Group Label"> 
        <menu id="MyMenu" imageMso="HappyFace" size="large"> 
         <button id="MyLaunchButton" label="Launch Tiger" onAction="macro1" /> 
         <button id="MyInfoButton" label="Info" onAction="macro2" /> 
         <button id="MyVersionButton" label="Version" onAction="macro3" /> 
         <button id="MyHelpButton" label="Help" onAction="macro4" /> 
        </menu> 
       </group> 
      </tab> 
     </tabs> 
    </ribbon> 
</customUI> 

我沒有勾住我的子程序/宏在這些按鈕還,但不應該是非常困難的。

我不會絆倒這個鏈接,其中包含一批Excel文件(針對每個應用程序),按類型,ID,與其他項目的關係列出所有菜單項。

http://www.microsoft.com/en-us/download/details.aspx?id=6627

+1

啊,是的,這是我正在談論的資源,但無法找到! – Thomas

1

你絕對可以修改特定文檔的XML刪除某些帶狀元件從功能區 - 我做了很多這個。您應該使用自定義用戶界面編輯器進行調查,該用戶界面編輯器將打開文檔並允許您使用Visible = False修改器修改選定功能區組的XML。然後,你應該可以保存加載項,並且當它加載到內存中時,它將隱藏你指定的部分,防止崩潰。

這對我來說是有用的前一段時間: http://gregmaxey.mvps.org/word_tip_pages/customize_ribbon_main.html

有微軟XML架構爲每個Office應用程序(我現在找不到 - 但肯定存在)。

我希望這是一些幫助。

+0

謝謝,我有自定義用戶界面編輯器,所以也許我會試試。 –

相關問題