我正在尝试设计一个有一些限制的工作簿而不使用Excel中的VBA,这在2007年和2010年是兼容的。我选择了“Microsoft Office的自定义UI编辑器”和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用户界面控件标识符。
答案 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
)且相关到“表格”。以下是它产生的快照:
当我将鼠标悬停在你要隐藏的“按钮”上时,我得到了工具提示“插页” - 这不是我在列表中看到的任何一个。我从中得出结论,确实无法按照您的要求进行操作 - 您无法使用XML禁用该按钮。
这并不意味着你无法达到你想要的效果。我建议采用以下方法。
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
,但短暂的闪光仍然是......
抱歉,我没有更好的消息。
答案 1 :(得分:1)
您可以选择“审阅”选项卡,选择“保护工作簿”,然后选中“结构”。您无需指定密码,“插入工作表”按钮将被禁用(但仍然可见)。
或者您可以从Office按钮,高级选项卡转到Excel选项,向下滚动到显示此工作簿的选项,然后取消选中显示工作表标签。
我不相信这可以通过XML完成。也就是说,禁用或隐藏此按钮(不隐藏所有工作表标签)。也许有人可能证明我错了;)