带插件的Excel插件

时间:2014-01-21 22:04:08

标签: excel visual-studio excel-vba add-in vba

我们开发了一个excel addin(.xlam)文件,其中包含一些基本功能

  

例如MySum(a,b)并返回我想要的总和等等

然后我将文件保存在网络上并使用

将其安装在其他人的Excel上
  

文件 - >选项 - >加载项

制作excel参考网络插件的作品就像魅力一样。每个人都可以在他们的本地excel应用程序上使用MySum()函数。

现在我想把它提升到一个新的水平,即我想在功能区菜单中加入相同的功能,例如,我们创建一个.exe文件用户安装它,菜单将出现在名为MySum的用户excel功能区上,这将提高添加更多功能的灵活性,并使最终用户更容易。

我听说并使用了一些第三方软件功能区菜单(使用xll文件),我知道它也可以通过Visual Studio完成。我只是想获得专家意见,了解我的方案的最佳方法。

任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:2)

使用自定义UI编辑器自行制作自定义功能区非常容易。注意 - 这不适用于Mac,因为我们的微软朋友似乎认为在两个平台上以相同的方式控制加载项的外观并不重要。给我买啤酒一段时间,我会告诉你我的想法......

无论如何,您不需要Visual Studio路由。只需转到

http://www.rondebruin.nl/win/s2/win001.htm

Ron de Bruin介绍了如何做到这一点。只需按照步骤操作即可。编辑源代码(在转换为插件之前),添加一些描述所需功能区组件的XML。您可以隐藏现有组件,将新组添加到现有色带,创建自己的标签......甚至可以很容易地制作漂亮的图标,这样您的按钮看起来很酷/个性化/专业(我使用Axialis图标工作室设计一些图标我是相当自豪....)

如果你遇到困难,请问!

更新这里是一个XML示例,它在Home选项卡后面生成一个新选项卡,并放置两组按钮:

<mso:customUI xmlns:mso="http://schemas.microsoft.com/office/2009/07/customui">
  <mso:ribbon>
  <mso:qat /> 
    <mso:tabs>
      <mso:tab id="myTab" label="Awesome functions" insertAfterMso="TabHome">
        <mso:group id="myGroup1" label="Awesome math" autoScale="true">
          <mso:button id="id_sum" label="sum" image="sigma" size="large" onAction="UI_doMath" /> 
          <mso:button id="id_mult" label="multiply" image="times" size="large" onAction="UI_doMath" /> 
          <mso:button id="id_var" label="variance" image="variance" size="large" onAction="UI_doMath" /> 
        </mso:group>
        <mso:group id="myGroup2" label="Awesome text" autoScale="true">
          <mso:button id="id_bold" label="really bold" image="bold" size="large" onAction="UI_doText" /> 
          <mso:button id="id_italic" label="italicize" image="italic" size="large" onAction="UI_doText" /> 
        </mso:group>
      </mso:tab>
    </mso:tabs>
  </mso:ribbon>
</mso:customUI>

如您所见,每个组都调用自己的功能 - 一个组调用UI_doMath,另一个组调用UI_doText。潜艇的签名看起来有点像这样:

Sub UI_doMath(controlID As String)

Select Case controlID
  Case "id_sum"
    call sumTheStuff
  Case "id_mult"
    call multiplyStuff
  Case "id_var"
    call computeVariance
  Case Else
    MsgBox "Unknown button: '" & controlID & "' was clicked!"
    Exit Sub
  End Select

End Sub

通过这种方式,单个例程是功能区中组中所有按钮的入口点。我认为,使代码更易于维护。对我而言尤其如此,因为我实际上有一个“独立于平台”的版本 - 也就是说,无论你是从菜单(在Mac上)还是在功能区(在PC上)中选择一个项目,你都会得到相同的功能。但这是我希望你不需要的改进。