【问题标题】:Control Name for Insert tab插入选项卡的控件名称
【发布时间】:2013-07-23 13:14:40
【问题描述】:

我正在尝试设计一个有一些限制的工作簿,而不在 Excel 中使用 VBA,它在 2007 年和 2010 年兼容。我选择了带有 XML 代码的“Microsoft Office 自定义 UI 编辑器”来限制一些选项:-保存-与信息选项卡一样,插入、删除、移动/复制工作表、隐藏工作表、取消隐藏工作表。我这样做很成功,但我注意到插入表选项卡“ICON”

仍在工作并且可以访问。任何人都可以通过文件中的 XML 指向控件名称来禁用它吗?

我的代码是:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
  <commands>
               <command idMso="FileSaveAsWebPage" enabled="false" />
               <command idMso="FileSaveAs" enabled="false" />
               <command idMso="FileSaveAsMenu" enabled="false" />
               <command idMso="FileSaveAsExcelXlsx" enabled="false" />
               <command idMso="FileSaveAsExcelXlsxMacro" enabled="false" />
               <command idMso="FileSaveAsExcel97_2003" enabled="false" />
               <command idMso="FileSaveAsExcelOpenDocumentSpreadsheet" enabled="false" />
               <command idMso="FileSaveAsPdfOrXps" enabled="false" />
               <command idMso="FileSaveAsOtherFormats" enabled="false" />

               <command idMso="SheetInsert" enabled="false" />
               <command idMso="SheetInsertPage" enabled="false" />
               <command idMso="SheetDelete" enabled="false" />
               <command idMso="SheetRename" enabled="false" />
               <command idMso="SheetMoveOrCopy" enabled="false" />
               <command idMso="SheetUnhide" enabled="false" />
               <command idMso="SheetProtect" enabled="false" />
               <command idMso="SheetTabColorGallery" enabled="false" /> 
               <command idMso="SheetTabColorMoreColorsDialog" enabled="false" />
             <command idMso="SelectAllSheets" enabled="false" />
  </commands>
  <backstage>
           <tab idMso="TabInfo" visible="false"/>
  </backstage>
</customUI>

我也尝试在 Microsoft 和 rondebruin 中搜索 Office Fluent 用户界面控制标识符。

【问题讨论】:

  • 你可以找到所有2010 idMsos here
  • 谢谢 Mehow 的快速响应,是的,我有一个相同的副本,我尝试使用名为“SheetInsertPage”的控件(如上面的代码中所述),但我仍然无法禁用它.你能给我更多建议吗
  • 你不能禁用那个标签
  • 任何通过 XML 禁用它的机会
  • Jimson,正如@pnuts 所说,Excel 具有很好的内置属性来限制使用和“可编辑性”,包括防止添加新工作表。如有必要,捕获内置选项之外的其他场景的另一种方法是挂钩相关事件并取消或撤消它(例如,您可以注册 Worbook_NewSheet 事件并删除新工作表)

标签: xml excel excel-2007 ms-office vba


【解决方案1】:

您可以选择“审阅”选项卡,选择“保护工作簿”,然后检查“结构”。您无需指定密码,“插入工作表”按钮将被禁用(但仍可见)。

或者您可以从 Office 按钮转到“高级”选项卡的 Excel 选项,向下滚动到 此工作簿的显示选项,然后取消选中 显示工作表选项卡。 p>

我不相信这可以通过 XML 完成。也就是说,禁用或隐藏此按钮(不隐藏所有工作表选项卡)。也许有人会证明我错了;)

【讨论】:

  • 如果有人证明我错了,我不会难过 ;) 但我很有信心,因为它是 UI 不可分割的一部分。
  • 我还是相信可以实现的。留下了一个未开发的黑暗面。一旦我遇到,我会告诉你的。
  • .. 尽量不要让它打扰你的睡眠 ;)
  • 谢谢安迪,我会努力的,不管它如何让我少睡了 2 晚。我仍然会设法解决。我仍然相信希望存在。再次感谢您为我节省宝贵的时间和投入。
  • 我已经问过其他地方,如果我得到答复,我会通知您。 (这些人 - 如果他们说是或否,那么我们可以把它当作福音。)
【解决方案2】:

要通过 XML 完成此操作,您需要能够访问该元素 - 它需要有一个 ID。手动扫描微软发布的各种列表没有任何帮助,但由于他们的文档非常草率,我决定编写一小段代码,在 Excel 应用程序中找到“每个带有 ID 的控件”的 ID,并列出它:

Sub listID()
Dim r As Range
Dim ctls
Dim ii As Long

Cells(1, 1).Value = "ID"
Cells(1, 2).Value = "caption"
Cells(1, 3) = "Type"
Set r = Range("a1")

For ii = 1 To 100000
  Set ctls = CommandBars.FindControl(Id:=ii)
  If Not (ctls Is Nothing) Then
  'Debug.Print "controls ID " & ii & " exists; the caption is " & ctls.Caption & "; the type is " & ctls.Type
  Set r = r.Offset(1, 0)
  r.Value = ii
  r.Offset(0, 1) = ctls.Caption
  r.Offset(0, 2) = ctls.Type
  r.Offset(0, 3) = ctls.TooltipText
  End If
Next ii

End Sub

运行此程序并过滤名称中带有eet 的任何内容后,我希望看到所有“可以控制”的控件(因为它们有一个msoID)并且与“表格”相关.以下是生成的快照:

当我将鼠标悬停在您要隐藏的“按钮”上时,我会看到工具提示“插入工作表”——这不是我在列表中看到的任何一个。我由此得出结论,确实不可能按照您的要求进行操作 - 您不能使用 XML 禁用该按钮。

这并不意味着你无法实现你想要的。我会建议以下方法。

  1. 捕获新建工作表时触发的工作簿事件,当场删除。当按钮“停止工作”时,人们很快就会放弃。下面的示例代码。
  2. 完全隐藏工作表选项卡,并提供在工作表之间导航的替代方法。因为这显然是一个“受控电子表格”,无论如何这可能是一个好主意。您可以在功能区上创建一个自定义选项卡(使用 XML,您似乎对此很熟悉),或者创建一个位于工作表底部的浮动工具栏 - 靠近“旧”选项卡曾经所在的位置。通过这种方式,您可以模拟行为 - 但工作量很大,而且有点小技巧
  3. 为工作簿添加保护。使用保护 -> 保护工作簿 -> “保护结构”:sheets can not be moved, deleted, hidden, unhidden, or renamed. New sheets cannot be inserted.

您必须添加到ThisWorkbook 的代码是:

Private Sub Workbook_NewSheet(ByVal Sh As Object)
  Dim temp As Boolean
  temp = Application.DisplayAlerts
  Application.DisplayAlerts = False
  Sh.Delete
  Application.DisplayAlerts = temp
End Sub

一旦这在您的工作簿中,任何时候用户单击“新工作表”按钮都会有一个非常短暂的闪烁,但不会创建新工作表。您可以添加一个Application.ScreenUpdating = False,但短暂的闪光仍然存在......

对不起,我没有更好的消息告诉你。

【讨论】:

  • 感谢弗洛里斯,但我很遗憾地说我正在寻找仅 XML 格式的解决方案。主要目的是限制没有宏的用户; VBA。我曾考虑仅通过 XML 使用它,因为它集成到我共享的文件中,从而使用户的选择更少且有限。我非常感谢您为破解所做的努力。再次非常感谢弗洛里斯。
  • 我知道您只要求 XML 解决方案 - 我怀疑(基于上述)这可能是不可能的。我可以问为什么您不希望在后台使用任何 VBA,或者保护工作簿结构 - 两者似乎都可以解决问题?我很好奇……
  • 我的大多数用户都没有意识到这一点。 (相反,我想说我已经尝试过使用保护;但是我的热心用户一直在破坏它并进行修改)。我尝试了 VBA,在许多情况下我发现,如果没有禁用/允许安全性;然后失去了目标。经过搜索,我想出了更安全的xml(基于我的用户的资源和条件)。
  • 希望我已经在适当的叙述中进行了解释。对不起,英语词汇不好。感谢您向我询问有关环境和条件的更多信息。请就此向我提出更多建议。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 2013-12-11
  • 2018-10-05
  • 2015-11-25
相关资源
最近更新 更多