我正在尝试通过VBA将两个图标以编程方式添加到新的功能区组中。我可以添加内置图标,但无法弄清楚如何使用自己的文件。
TLDR:如果将内置图标使用imageMso
属性,而不使用自定义图标使用image
属性或getImage
回调,则下面的代码有效。
这是我正在使用的XML
<customUI xmlns='http://schemas.microsoft.com/office/2006/01/customui'>
<ribbon>
<tabs>
<tab id='customTab' label='CP Analyzer' insertAfterMso='TabData'>
<group id='idCPA' label='CP Analyzer'>
<button id='customButton1' label='Select Column' size='large' onAction='SelectColumn' image='imgLabel' />
<button id='customButton2' label='Run Change Point Analyzer' size='large' onAction='RunCP' image='imgFast' />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
我在与包含上述代码的加载项相同的文件夹中有两个.png文件(分别称为imgLabel.png和imgFast.png)。通过使用Microsoft Custom UI Editor验证语法,image='myImageName'
正确无误,并且在使用UI编辑器时有效,但在VBA中以编程方式使用时无效。
如何引用这些图像?
这是完整的代码,它可以通过修改Excel.officeUI主文件来工作:
Sub AddR
Dim hFile As Long
Dim path As String, filename As String, ribbonXML As String, user As String
hFile = FreeFile
user = Environ("Username")
path = "C:\Users\" & user & "\AppData\Local\Microsoft\Office\"
filename = "Excel.officeUI"
ribbonXML = ' the XML above
Open path & filename For Output Access Write As hFile
Print #hFile, ribbonXML
Close hFile
End Sub
我尝试使用描述为here的getImage回调方法,该回调方法对于独立文件而言效果很好,但不能作为外接程序使用,这对我来说很重要。
特别是,使用“自定义UI”编辑器,您可以在嵌入到Excel文件中的自定义UI XML文件中设置回叫请求。因为我不能这样做,但我需要它作为外接程序,因为它只是包含的代码(至少经过一整天的搜索,我找不到方法)。因此,我在上面通过编程方式尝试更改主Excel.officeUI文件(并在用户禁用该加载项时将其更改回默认值)。