Excel VBA - 删除切片器右键菜单选项

问题描述 投票:0回答:1

我想从右键单击切片器时弹出的菜单中删除选项。

更具体地说,我想删除“删除”、“剪切”、“刷新”、两个排序选项和“报告连接”。

我尝试遵循类似的方法:

Application.CommandBars("Cell").Controls("Cut").Delete

为了找到正确的名称,我循环了所有命令栏及其控件以查找有关“Slicer”的任何内容,并且它们都位于命令栏“Nil”下。

该控件没有名称属性,它们有标题,但看起来您必须删除“&”,否则会引发错误。

我从“删除”选项开始,尝试使用标题名称(删除“&”),还尝试使用索引号,它们都没有抛出错误,但它们没有从菜单中删除该选项。

Application.CommandBars("Nil").Controls("Remove Slicers").Delete
Application.CommandBars("Nil").Controls(198).Delete

我尝试过其他删除控件,索引 17、18、198、200,但它们都没有改变任何内容。

我还缺少什么吗?

提前致谢

excel vba controls slicers commandbar
1个回答
0
投票

我自己解决了这个问题。经过一些研究,我使用 customUI 实现了这一点。我还添加了一些额外的自定义来删除数据透视表控件和选项卡,但已用注释标记了功能,因此可以根据需要进行个性化:

    <customUI xmlns=http://schemas.microsoft.com/office/2009/07/customui>
       <commands>
          <--! Disable Slicer right-click menu controls-->          
          <command idMso="SlicerSettings"  enabled="false" />
          <command idMso="SlicerConnectionsMenu"  enabled="false" />
          <command idMso="SlicerDelete"  enabled="false" />
          <command idMso="SlicerRefresh"  enabled="false" />
          <command idMso="ObjectSizeAndPropertiesDialog"  enabled="false" />
          <command idMso="MacroAssign"  enabled="false" />
          <command idMso="ObjectBringToFront"  enabled="false" />
          <command idMso="ObjectSendToBack"  enabled="false" />
          <command idMso="PasteGalleryMini"  enabled="false" />
          <command idMso="SlicerMultiSelect"  enabled="false" />
          <command idMso="SlicerClearFilter"  enabled="false" />
          <command idMso="SlicerDataSourceOrder"  enabled="false" />
          <command idMso="SlicerSortUp"  enabled="false" />
          <command idMso="SlicerSortDown"  enabled="false" />
       </commands>
       <ribbon>
          <contextualTabs>
             <tabSet idMso="TabSetSlicerTools" visible="false" />
             <--! Hide PivotTable Analyze and Design tabs -->
             <tabSet idMso="TabSetPivotTableTools">
                <tab idQ="TabPivotTableToolsOptions" visible="false" />
                <tab idQ="TabPivotTableToolsDesign" visible="false" />
             </tabSet>
          </contextualTabs>
       </ribbon>
       <contextMenus>
          <--! Hide Slicer right-click menu controls--> 
          <contextMenu idMso="ContextMenuSlicer">
             <button idMso="Cut" visible="false" />
             <button idMso="Copy" visible="false" />
          </contextMenu>
       </contextMenus>
    </customUI>

我使用的非常有用的资源:

大部分代码的来源: https://www.mrexcel.com/board/threads/disable-delete-for-pivot-table-slicer.767331/page-2#posts还提到了如何在需要时使用 VBA 而不是动态禁用每次都必须编辑 customUI14.xml。

如何在工作簿中插入这个customUI14.xml文件(不需要新工具,我使用7-Zip): https://bettersolutions.com/vba/ribbon/document-level-notepad.htm

我仍然不清楚为什么它们被称为“命令”而不是下面提到的文件中显示的按钮,但它是有效的。

并且可以从此处找到的 ExcelControls 文件中获取不同元素的名称列表: https://github.com/OfficeDev/office- Fluent-ui-command-identifiers/tree/master

额外: 我一直在寻找此功能来制作类似仪表板的工作簿,其中用户无法删除切片器或修改数据透视表布局,但仍然与切片器和选择单元格进行交互。我相信上述功能与保护和禁用右键单击以及使用 VBA 按删除键相结合可以实现这一目标。 (禁用右键单击不适用于切片器,这就是需要这个额外解决方案的原因)。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.