カスタム検索
Office関連

ユーザーインタフェースとプログラムコードの分離(Excel-DNA)

※ 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要素、状況に応じて使い分けるのが良いでしょう。