注意:此回复为自动翻译,因此可能包含语法错误或不自然的表达。
感谢您联系 Microsoft Q&A 论坛。
根据您的描述,我理解您正在尝试使用 VBA 和 CommandBars 来隐藏“帮助”菜单并在 Access 中创建自定义工具栏,但未能如预期工作。
根据我的研究,您的 CommandBar 代码不起作用的原因是 Access 2007 及更高版本用功能区(Ribbon)界面替代了传统的 CommandBar 系统。CommandBars 现在仅在上下文菜单(弹出菜单)中可靠工作。当您尝试在窗口顶部创建自定义工具栏时,它们会自动归入“加载项”选项卡,而不是作为独立工具栏显示。
此外,传统的“菜单栏” CommandBar 已被功能区取代,这也是您的代码无法找到或修改它的原因。通过 USysRibbons 创建的功能区自定义使用基于 XML 的系统,与 CommandBars 集合分开运行,因此无法通过 CommandBar 方法访问或修改它们。
如果您希望隐藏“帮助”和“创建”选项卡,同时以编程方式控制功能区,可以考虑使用功能区 XML 自定义方法。
我在自己的环境中测试过,这种方法效果很好。您可以参考以下步骤:
1.创建 USysRibbons 表
-创建一个名为 USysRibbons 的表。
-添加两列:RibbonName(短文本)和 RibbonXML(长文本)。
-添加一行,RibbonName = “MyCustomRibbon”,并在 RibbonXML 中粘贴以下 XML:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" onLoad="OnRibbonLoad">
<ribbon startFromScratch="true">
<tabs>
<tab idMso="TabHomeAccess" visible="true"/>
<tab idMso="TabCreate" visible="false"/>
<tab idMso="TabExternalData" visible="true"/>
<tab idMso="TabDatabaseTools" visible="true"/>
<tab id="CustomTab" label="My Custom Tab">
<group id="CustomGroup" label="My Commands">
<button id="btn1" label="My Button" onAction="ButtonClick"/>
</group>
</tab>
</tabs>
</ribbon>
</customUI>
注意:使用 startFromScratch="true" 会默认隐藏所有内置选项卡(包括“帮助”和“创建”)。然后您可以手动添加要保持可见的选项卡,并设置 visible="true"。请确保在 visible 属性中使用小写的 true 或 false,因为 XML 区分大小写,使用 True 或 False 可能会导致错误。
2:创建 VBA 模块
-按 Alt+F11 打开 VBA 编辑器。
-进入 工具 > 引用,勾选 Microsoft Office 16.0 Object Library。
-插入一个新模块并添加以下代码:
Option Compare Database
Option Explicit
Public MyRibbon As IRibbonUI
Sub OnRibbonLoad(ribbon As IRibbonUI)
Set MyRibbon = ribbon
End Sub
Sub ButtonClick(control As IRibbonControl)
MsgBox "Button clicked: " & control.ID
End Sub
Sub RefreshRibbon()
If Not MyRibbon Is Nothing Then
MyRibbon.Invalidate
End If
End Sub
3:启用自定义功能区
-完全关闭数据库。
-重新打开并进入 文件 > 选项 > 当前数据库。
-在“功能区名称”中选择 MyCustomRibbon。
-点击 确定 并重新启动数据库。
重新打开后,您会看到“帮助”选项卡已隐藏,并且您拥有一个带有可动态修改控件的自定义选项卡,可以通过 VBA 调用 RefreshRibbon() 来刷新。
请注意,上面的图片是英文版本。我们很抱歉无法提供中文版本。如有需要,请自行翻译。
这种方法可以让您完全控制哪些选项卡可见,并允许您添加自定义功能。问题与您的 Microsoft 365 帐户权限无关,而是由于传统 CommandBar 系统与现代功能区界面之间的架构差异。
希望这对您有所帮助!如果您需要进一步的协助,或者我在您的问题中有任何误解,请随时纠正我并告诉我。
如果此答案对您有帮助,请点击“接受答案”,并友好地点赞。若您对此答案有其他问题,请点击“评论”。
注意:如果您希望收到此线程的相关电子邮件通知,请按照我们的文档中的步骤启用电子邮件通知功能