有没有办法在Powerpoint VBA中禁用CommandBar控件?

时间:2013-05-31 14:56:32

标签: vba ribbon powerpoint-vba

我有一个PPT加载项,如果没有维护某个ViewType,它可能会失败。

我没有看到任何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

2 个答案:

答案 0 :(得分:1)

您绝对可以修改特定文档的XML以从功能区中删除某些功能区元素 - 我已经完成了大量的操作。您应该使用自定义UI编辑器进行调查,该编辑器将打开文档并允许您使用Visible = False修饰符修改所选功能区组的XML。然后,您应该能够保存加载项,当它加载到内存中时,它将隐藏您指定的部分,从而防止崩溃。

这对我来说很有用: http://gregmaxey.mvps.org/word_tip_pages/customize_ribbon_main.html

每个Office应用程序都有Microsoft XML Schema(我现在找不到 - 但肯定存在)。

我希望能有所帮助。

答案 1 :(得分:0)

Red的建议非常有帮助。对于一些(错误的...... 很多)的试错,我能够对功能区进行一些调整。我提出这个答案,希望我的试错对那些同样不熟悉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,与其他项目的关系等列出所有菜单项。 / p>

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