插入选项卡的控件名称

时间:2013-07-24 07:21:52

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

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

enter image description here

仍然有效,可以访问。任何人都可以指向控制名称来通过文件中的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用户界面控件标识符。

2 个答案:

答案 0 :(得分:4)

要通过XML完成此操作,您需要能够访问该元素 - 它需要具有ID。手动扫描Microsoft发布的各种列表没有任何帮助,但由于他们的文档非常草率,我决定编写一小段代码,在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)且相关到“表格”。以下是它产生的快照:

enter image description here

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

这并不意味着你无法达到你想要的效果。我建议采用以下方法。

  1. 捕获创建新工作表时触发的工作簿事件,并在现场将其删除。当按钮“停止工作”时,人们很快就会放弃。示例代码如下。
  2. 完全隐藏工作表标签,并提供在工作表之间导航的替代方法。因为这显然是一个“受控电子表格”,无论如何都可能是一个好主意。您可以在功能区上创建自定义选项卡(使用XML,您似乎熟悉它),或者创建一个位于工作表底部的浮动工具栏 - 靠近“旧”选项卡的位置。通过这种方式,您可以模拟行为 - 但这需要大量的工作和一些黑客攻击
  3. 为工作簿添加保护。使用保护 - &gt;保护工作簿 - &gt; “保护结构”:sheets can not be moved, deleted, hidden, unhidden, or renamed. New sheets cannot be inserted.
  4. 您必须添加到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,但短暂的闪光仍然是......

    抱歉,我没有更好的消息。

答案 1 :(得分:1)

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

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

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