我试图设计一个有一些限制的工作簿而不使用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,您似乎熟悉它),或创建位于工作表底部的浮动工具栏 – 靠近“旧”选项卡的位置.通过这种方式,您可以模拟行为 – 但这需要大量的工作和一些黑客攻击
>为工作簿添加保护.使用保护 – >保护工作簿 – > “保护结构”:无法移动,隐藏,取消隐藏或重命名工作表.无法插入新工作表.
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,但短暂的闪存仍然是……
对不起,我没有更好的消息.