Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 插入选项卡的控件名称_Xml_Excel_Excel 2007_Ms Office_Vba - Fatal编程技术网

Xml 插入选项卡的控件名称

Xml 插入选项卡的控件名称,xml,excel,excel-2007,ms-office,vba,Xml,Excel,Excel 2007,Ms Office,Vba,我正在尝试设计一个带有一些限制的工作簿,而不使用Excel中的VBA,它在2007年和2010年是兼容的。我选择了带有XML代码的“Microsoft Office自定义UI编辑器”,以限制一些选项:-使用“信息”选项卡另存为、插入、删除、移动/复制工作表、隐藏工作表、取消隐藏工作表。我成功地这样做了,但我注意到插入工作表选项卡“图标” 仍在工作,可以访问。有谁能告诉我控件名,以便通过文件中的XML禁用它吗 我的代码是: <?xml version="1.0" encoding=

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

仍在工作,可以访问。有谁能告诉我控件名,以便通过文件中的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和Office Fluent用户界面控件标识符

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

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


我不相信这可以通过XML实现。即,禁用或隐藏此按钮(不隐藏所有图纸选项卡)。也许有人会证明我错了;)

要通过XML实现这一点,您需要能够访问元素-它需要有一个ID。手动扫描Microsoft发布的各种列表没有任何帮助,但由于它们的文档非常潦草,我决定编写一段非常小的代码来查找元素的IDExcel应用程序中的“每个具有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禁用该按钮

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

  • 捕获在创建新工作表时触发的工作簿事件,并立即将其删除。当按钮“停止工作”时,人们将很快放弃。下面的示例代码
  • 完全隐藏工作表选项卡,并提供在工作表之间导航的替代方法。因为这显然是一个“受控电子表格”,这可能是一个好主意。您可以在功能区上创建自定义选项卡(使用XML,您似乎对此很熟悉),或创建一个位于工作表底部的浮动工具栏-靠近“旧”选项卡的位置。通过这种方式,您可以模拟该行为-但这需要大量的工作和一些技巧
  • 向工作簿添加保护。使用“保护”->“保护工作簿”->“保护结构”:
    不能移动、删除、隐藏、取消隐藏或重命名工作表。不能插入新工作表。
  • 您必须添加到此工作簿的代码为:

    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
    
    在工作簿中,用户单击“新建工作表”按钮时,会出现一个非常简短的flash,但不会创建新工作表。您可以添加一个
    应用程序。ScreenUpdate=False
    ,但简短的flash会保留


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

    您可以找到所有2010
    idMso
    s谢谢您的快速响应,是的,我有一个相同的副本,我尝试使用名为“SheetInsertPage”的控件(如上代码所述)但我仍然无法使其禁用。你能给我更多建议吗?你不能禁用该选项卡。正如@pnuts所说,XMLJimson有任何禁用它的机会。Excel具有非常好的内置属性,可以限制使用和“可编辑性”,包括防止添加新工作表。如果需要,还可以捕获内置属性之外的其他场景选项是连接到相关事件并取消或撤消它(例如,您可以注册Worbook_NewSheet事件并删除新工作表)如果有人证明我错了,我不会感到不安;)但我很自信,因为它是UI的一个组成部分。我仍然相信它是可以实现的。留下了一个黑暗的一面,这是未经探索的。我会让你知道,一旦我遇到……尽量不要让它打扰你的睡眠;)谢谢安迪,我会尝试,无论它如何让我少睡2个觉好的。我仍然会努力解决。我仍然相信有希望。再次感谢你抽出宝贵的时间和投入。我已经问过其他地方,如果我得到答复,我会让你知道。(这些人——如果他们说是或不是,我们可以把它当作福音。)谢谢Floris,但我很抱歉地说,我正在寻找一种仅使用XML的解决方案。主要目的是限制没有宏的用户;VBA。我曾考虑过仅通过XML使用,因为这将集成到我共享的文件中,从而使用户拥有更少和有限的选项。无论如何,我非常感谢您为破解此问题所做的努力。不止一次k非常感谢Floris。我知道你要求的是仅XML的解决方案-我怀疑(基于上述情况)这可能不可能。我可以问一下,为什么你不希望在后台使用VBA或保护工作簿结构-这两者似乎都能解决问题?我很好奇…我的大多数用户都没有意识到这一点。(相反,我想说的是,我已经尝试过使用protect;但我的热心用户一直在破坏它并修改它)