【发布时间】:2020-07-01 15:23:37
【问题描述】:
我有一个带有许多小子的 Excel 加载项,它在初始化时会在功能区上创建一个自定义选项卡来控制这些子。我使用带有 XML 代码的 VBA 字符串来修改功能区(参见下面的代码)。
插件旨在与许多用户共享,其中大多数用户已经进行了一些自定义。问题是,加载项会删除用户可能在其 Excel 功能区上拥有的任何自定义设置,无论是选项卡、按钮还是快捷方式。
我已经玩了几天这个问题,但无法找到解决方案。我需要它来将自定义选项卡添加到已经存在的功能区,而不是覆盖它。
为加载项控件创建自定义选项卡的部分子如下
Sub CreateRibbon()
'create a custom ribbon menu'
Dim hFile As Long
Dim path As String, fileName As String, ribbonXML As String
hFile = FreeFile
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
fileName = "Excel.officeUI"
ribbonXML = "<mso:customUI xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" & vbNewLine
ribbonXML = ribbonXML + " <mso:ribbon startFromScratch='false'>" & vbNewLine
ribbonXML = ribbonXML + " <mso:qat/>" & vbNewLine
ribbonXML = ribbonXML + " <mso:tabs>" & vbNewLine
'tab'
ribbonXML = ribbonXML + " <mso:tab id='MicroHelpers' label='Helpers' insertBeforeQ='mso:TabFormat'>" & vbNewLine
'group'
ribbonXML = ribbonXML + " <mso:group id='MassFormulas' label='Mass Formula' autoScale='true'>" & vbNewLine
ribbonXML = ribbonXML + AddButtonXML("TextToNum", "WordCount", "Text To Num")
ribbonXML = ribbonXML + " </mso:group>" & vbNewLine
.....
ribbonXML = ribbonXML + " </mso:group>" & vbNewLine
ribbonXML = ribbonXML + " </mso:tab>" & vbNewLine
ribbonXML = ribbonXML + " </mso:tabs>" & vbNewLine
ribbonXML = ribbonXML + " </mso:ribbon>" & vbNewLine
ribbonXML = ribbonXML + "</mso:customUI>"
ribbonXML = Replace(ribbonXML, """", "")
Open path & fileName For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile
end sub
我会很感激你的指导
【问题讨论】:
-
为什么不直接使用加载项的 CustomUI 部分?
-
这里有很多讨论:stackoverflow.com/questions/8850836/… 事情似乎是,如果您在运行时添加自定义 UI,您需要稍后将其删除,但不仅仅是完全清除用户自定义 UI,而是通过将其恢复到原始状态。这不是一件简单的事情(如果另一个加载项在加载您的加载项后对其进行了修改怎么办?)因此使用 customIUEditor 工具是“最佳”方法。
-
@Rory,你是什么意思?
-
@TimWilliams,使用编辑器确实是最简单的方法,但不幸的是,由于我公司的政策,我不能使用任何其他软件。另外,我没有完全理解您消息的删除部分。我不需要在 WorkBook 关闭时清除功能区,该选项卡应该始终存在。这就像一次性激活的东西,意味着安装一次并每天使用。
-
我假设您在关闭加载项时正在删除自定义 xml。仅供参考,您不需要 CustomUI 编辑器 - 都可以通过其他方式完成,例如:stackoverflow.com/questions/20772723/…