我想从右键单击切片器时弹出的菜单中删除选项。
更具体地说,我想删除“删除”、“剪切”、“刷新”、两个排序选项和“报告连接”。
我尝试遵循类似的方法:
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,但它们都没有改变任何内容。
我还缺少什么吗?
提前致谢
我自己解决了这个问题。经过一些研究,我使用 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 按删除键相结合可以实现这一目标。 (禁用右键单击不适用于切片器,这就是需要这个额外解决方案的原因)。