※ Excel-DNAについては「Excel-DNAの紹介(Excel-DNA)」参照。
「ExcelのメニューからDNAコードを実行する(Excel-DNA)」で紹介したように、実行するプロシージャにExcelCommand属性を付けることによってメニューからコードを実行することができます。
しかし、保守性・拡張性の観点から見るとこの方法はあまり好ましくありません(項目の増加に伴ってメニューの管理が煩雑になってしまいます)。
そこで、メニューの項目数が多くなる場合や、より柔軟にメニュー設定を行いたい場合には、下記コードのようにメニュー部分(ユーザーインターフェース)とプログラムコード部分を完全に分けることをお薦めします。
dnaファイルのコード(文字コード:utf-8)
<DnaLibrary Name="SampleUI" Language="VB">
<Reference Name="System.Windows.Forms" />
<!-- プログラムコード ここから -->
<![CDATA[
Imports System.Windows.Forms
Imports ExcelDna.Integration.CustomUI
Public Module Module1
Public Sub buttonOld_onAction()
MessageBox.Show("Hello world!")
End Sub
End Module
Public Class MyRibbon
Inherits ExcelRibbon
Public Sub button2007_onAction(control as IRibbonControl)
MessageBox.Show("Hello " & control.Id.ToString() & " 2007!")
End Sub
Public Sub button2010_onAction(control as IRibbonControl)
MessageBox.Show("Hello " & control.Id.ToString() & " 2010!")
End Sub
End Class
]]>
<!-- プログラムコード ここまで -->
<!-- CustomUI(2010用) ここから -->
<CustomUI>
<customUI xmlns='http://schemas.microsoft.com/office/2009/07/customui'>
<ribbon>
<tabs>
<tab id='myTab' label='DNA Menu Tab 2010' insertBeforeMso='TabHome'>
<group id='myGroup' label='My Group 2010'>
<button id='myButton' label='My Button 2010' imageMso='HappyFace' size='large' onAction='button2010_onAction' />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
</CustomUI>
<!-- CustomUI(2010用) ここまで -->
<!-- CustomUI(2007用) ここから -->
<CustomUI>
<customUI xmlns='http://schemas.microsoft.com/office/2006/01/customui'>
<ribbon>
<tabs>
<tab id='myTab' label='DNA Menu Tab 2007' insertBeforeMso='TabHome'>
<group id='myGroup' label='My Group 2007'>
<button id='myButton' label='My Button 2007' imageMso='SadFace' size='large' onAction='button2007_onAction' />
</group>
</tab>
</tabs>
</ribbon>
</customUI>
</CustomUI>
<!-- CustomUI(2007用) ここまで -->
<!-- CustomUI(2007以前用) ここから -->
<CustomUI>
<commandBars xmlns='http://schemas.excel-dna.net/office/2003/01/commandbars'>
<commandBar name='Worksheet Menu Bar'>
<popup caption='DNA Menu'>
<button caption='My Button OLD' faceId='1695' onAction='buttonOld_onAction' />
</popup>
</commandBar>
</commandBars>
</CustomUI>
<!-- CustomUI(2007以前用) ここまで -->
</DnaLibrary>
Excel-DNAは、上記コードのようにCustomUI要素でユーザーインターフェースをカスタマイズすることができます。
さらに、customUIもしくはcommandBars要素の名前空間を指定することで、Excelのバージョンに応じてカスタマイズすることも可能になっています(上記コードの場合は2007以前、2007、2010のそれぞれの環境に応じて設定しています)。
上記のようにCustomUI要素を使うことによって、より柔軟にユーザーインターフェースを設定することができますが、ExcelCommand属性を使用する場合に比べてコードが複雑になってしまうといったデメリットもあります。
ExcelCommandとCustomUI要素、状況に応じて使い分けるのが良いでしょう。