Jim*_*ose 7 xml excel vba excel-2007 ms-office excel-vba
我试图设计一个有一些限制的工作簿而不使用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>
Run Code Online (Sandbox Code Playgroud)
我也试过在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
Run Code Online (Sandbox Code Playgroud)
在我运行此命令并过滤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
Run Code Online (Sandbox Code Playgroud)
一旦将其添加到您的工作簿中,每当用户单击“新工作表”按钮时,都会出现非常短暂的闪烁,但不会创建新工作表。您可以添加一个Application.ScreenUpdating = False,但短暂的闪光仍然存在......
抱歉,我没有更好的消息给你。
您可以选择“审阅”选项卡,选择“保护工作簿”,然后选中“结构”。您不需要指定密码,“插入工作表”按钮将被禁用(但仍然可见)。
或者,您可以从 Office 按钮、“高级”选项卡转到“Excel 选项”,向下滚动到“此工作簿的显示选项”,然后取消选中“显示工作表选项卡”。
我不相信这可以通过 XML 来完成。也就是说,禁用或隐藏此按钮(不隐藏所有工作表选项卡)。也许有人会证明我错了;)