Vba 如何在Office文件中为自定义功能区嵌入图像

Vba 如何在Office文件中为自定义功能区嵌入图像,vba,excel,ribbon,Vba,Excel,Ribbon,我正在为Excel开发一个自定义功能区扩展,其中一个控件需要不同的自定义图像。我设法使用了文件系统中的一些图像,但我想将这些图像嵌入到.xlsm文件中。 是否可以执行此操作并从更新控件图像的VBA代码中引用它们 出于测试目的,这是定义自定义功能区的XML: <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="ribbonLoaded"> <ribbon>

我正在为Excel开发一个自定义功能区扩展,其中一个控件需要不同的自定义图像。我设法使用了文件系统中的一些图像,但我想将这些图像嵌入到.xlsm文件中。 是否可以执行此操作并从更新控件图像的VBA代码中引用它们

出于测试目的,这是定义自定义功能区的XML:

<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui" onLoad="ribbonLoaded">
  <ribbon>
    <tabs>
      <tab idMso="TabHome" >
        <group id="customGroup1" label="My Group" insertAfterMso="GroupFont">
          <button id="customButton1" label="Click Me" size="large" onAction="Macro1" getImage="getButtonImage"/>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>
我试图在.xlsm中添加bmp文件,并在更新关系文件(.rels)时引用它们,但我不知道如何从VBA引用它们,最重要的是,当我用Excel打开文件并保存时,它们会自动删除


感谢您的帮助

如果图像嵌入到customUI中,则不需要VBA将其添加到控件中。只需对
图像
标记中的图像使用相同的ID即可:

<button id="button1" label="Test" size="large" image="TestID" onAction="ButtonOnAction" />

我的示例正在处理ID为“TestID”的图像,该图像必须在customUI XML中找到-展开中的
customUI
节点以查找或更改图像ID(或使用编辑器添加新图像)。

robcooper的回答可能会有所帮助:

Public Sub getButtonImage(ByVal control As IRibbonControl, ByRef image)
'for use in Access 2007 Ribbon control
'requires a reference to the Micrsoft Office 12.0 Object Library
    Select Case control.ID
    Case "cmdMainMenu"
        Set image = LoadPicture(CurrentProject.Path & "\home.bmp")
    End Select
End Sub

您需要一次添加几个图像还是需要多次使用新图像更新文件?如果只需要添加一次,则可以使用将它们添加到customUI XML中。如果你需要经常更新它们,这种方法可能不太管用。我只需要添加一次图像。自定义UI编辑器对于解决嵌入它们的第一个问题非常有用(我手动引用了错误的.rels文件中的图像…)。但是如何在VBA中访问和加载它们呢?我认为LoadPicture函数不能与它们一起工作…谢谢Olle。再近一步!但是,如果需要从所有嵌入的图像中动态更改按钮的图像,我该怎么办?我问题中的
getButtonImage
显示了我想要实现的目标:每次用户单击按钮时,循环浏览一组图像(示例中只有2个,但它们最多可达256个…)。啊,这就是为什么我在对你的问题的评论中问了“一次或几次”,但我现在发现我的问题有点不清楚。我需要测试一下,但恐怕我现在没有时间。如果我解决了,我会给你回复的!我从Ron de Bruin那里找到的。请参阅标题下的示例,在打开文件后使用VBA更改图像,以了解可能的前进方向。这是我今天能为你做的最好的了!是的,示例3正是我想要的!不幸的是,结论是无法从Excel文件加载图像,唯一的解决方法是临时解压缩图像以访问图像文件…:-(我一直在尝试使用CustomXMLParts的另一种方法,但恐怕无法实现。我可以将磁盘中的图像加载到文件中的自定义xml中,然后将这些图像保存回磁盘-但我不能在
getImage
回调中使用它们。
Public Sub getButtonImage(ByVal control As IRibbonControl, ByRef image)
'for use in Access 2007 Ribbon control
'requires a reference to the Micrsoft Office 12.0 Object Library
    Select Case control.ID
    Case "cmdMainMenu"
        Set image = LoadPicture(CurrentProject.Path & "\home.bmp")
    End Select
End Sub