微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

xml – “插入”选项卡的“控件名称”

我试图设计一个有一些限制的工作簿而不使用Excel中的VBA,它在2007年和2010年兼容.我选择了“自定义UI编辑器用于Microsoft Office”和 XML代码来限制一些选项: – 保存为信息选项卡,插入,删除,移动/复制工作表,隐藏工作表,取消隐藏工作表.我这样做是成功的,但我注意到插入表格标签“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用户界面控件标识符.

要通过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)并且与“Sheets”相关.以下是它产生的快照:

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

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

>捕获创建新工作表时触发的工作簿事件,并在现场将其删除.当按钮“停止工作”时,人们很快就会放弃.示例代码如下.
>完全隐藏工作表标签,并提供在工作表之间导航的替代方法.因为这显然是一个“受控电子表格”,无论如何都可能是一个好主意.您可以在功能区上创建自定义选项卡(使用XML,您似乎熟悉它),或创建位于工作表底部的浮动工具栏 – 靠近“旧”选项卡的位置.通过这种方式,您可以模拟行为 – 但这需要大量的工作和一些黑客攻击
>为工作簿添加保护.使用保护 – >保护工作簿 – > “保护结构”:无法移动,隐藏,取消隐藏或重命名工作表.无法插入新工作表.

您必须添加到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,但短暂的闪存仍然是……

对不起,我没有更好的消息.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。