2007 Office Fluent リボンをカスタマイズする (開発者向け) (パート 1/3)

要約 : 2007 Office Fluent ユーザー インターフェイスをカスタマイズする方法について説明します。また、Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System の新機能が、リボンのユーザー設定の RAD 開発をどのようにサポートしているかについても解説しています。(40 印刷ページ)

Frank Rice、Microsoft Corporation

Ken Getz、MCW Technologies, LLC (英語)

発行 : 2006 年 5 月

更新 : 2006 年 10 月

適用対象 : Microsoft Office Access 2007、Microsoft Office Excel 2007、Microsoft Office Outlook 2007、Microsoft Office PowerPoint 2007、Microsoft Office Word 2007、Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System、Microsoft Visual Studio 2005

目次

  • 強化されたユーザー インターフェイス

  • ユーザー エクスペリエンスを高める新しい手段

  • 既存のソリューションとは

  • Office アプリケーションの Fluent UI をカスタマイズする

  • コールバックを使用する

  • Fluent UI をカスタマイズする 2 とおりの方法

  • ドキュメント ベースのアドインを Fluent UI に追加する

  • Access 2007 の UI カスタマイズ

  • Access のアプリケーション レベルのカスタム リボンを作成する

  • 実行時にユーザー設定を読み込む

  • その他のアプリケーションのリボンのユーザー設定シナリオ

  • COM アドインを使用して Fluent UI を変更する

  • 既存のコマンド バー アドインで作業する

  • 動的に Fluent UI を更新する

  • イメージを読み込む

  • まとめ

  • 追加情報

強化されたユーザー インターフェイス

2007 Microsoft Office system のアプリケーションの多くに新しい外観が適用されています。新しい Microsoft Office Fluent ユーザー インターフェイス (UI) によって、現在の階層型メニュー、ツール バー、および作業ウィンドウが、効率性および有用性を高めるために最適化されたよりシンプルなシステムに置き換えられています。この新しい Fluent UI には、強化されたショートカット メニューやヒント、ミニ ツール バー、およびキーボード ショートカットがあり、ユーザーの効率性と生産性を向上させます。

注意

Fluent UI は、Microsoft Office Access 2007、Microsoft Office Excel 2007、Microsoft Office PowerPoint 2007、Microsoft Office Word 2007 など、複数の 2007 Microsoft Office アプリケーションで実装されています。リボンについては、Microsoft Office Outlook 2007 で Outlook アイテムを編集しているときにも使用できます。Fluent UI をカスタマイズするには、Microsoft Visual Studio でサポートされている Microsoft .NET Framework ベースの言語と XML マークアップを組み合わせて使用します。Microsoft Visual Basic for Applications (VBA)、Microsoft Visual C++、および Microsoft Visual Basic 6.0 を使ってカスタマイズすることも可能です。

ユーザー エクスペリエンスを高める新しい手段

開発者は以前のバージョンの Office のツールおよびプログラミング構造を利用して、独創的な手段で Fluent UI を拡張してきました。たとえば、コマンド バー オブジェクト モデルを使用して、カスタム Office アプリケーションで豊富なソリューションを構築できます。この従来からの手法を引き継ぐことで、ユーザー エクスペリエンスを向上させるための革新的なモデルが UI 拡張性によって導入されています。Fluent UI を構成するコンポーネントは、拡張マークアップ言語 (XML) および従来のプログラミング言語の 1 つを使用して操作します。XML はプレーン テキストであるため、すべてのテキスト エディタでカスタマイズ ファイルを作成でき、Fluent UI を簡単に操作できます。また、各アプリケーションで同じプログラミング モデルが採用されているので、最小限の調整を行うだけでカスタム Fluent UI ファイルを再利用できます。

図 1. 2007 Office アプリケーションの Fluent UI

リボン UI

XML マークアップ ファイルを使用して Fluent UI をカスタマイズすれば、コマンド バー オブジェクト モデルをベースにした複雑なアドインを使用する必要性が大幅に減ります。ただし、以前のバージョンの Office 向けに記述されたアドインについては、ほとんど、あるいはまったく変更しなくても Fluent UI で動作し続けます。

既存のソリューションとは

以前のバージョンの Office では、コマンド バー オブジェクト モデルを使用して Visual Basic コードを作成し、このコードを使って Fluent UI を変更しました。この従来のコードは、Office の 2007 リリースでも引き続き動作します。さらに、ほとんどの場合、変更が不要です。ただし、Microsoft Office 2003 のツール バーへの変更は、[アドイン] タブに表示されます。表示されるカスタマイズの種類は、アドインの元の設計によって異なります。たとえば、[メニュー コマンド] グループが作成され、このグループには以前のメニュー構造 ([ファイル] メニュー、[挿入] メニュー、および [ツール] メニュー) に追加されているアイテムが含まれます。また、[ツール バー コマンド] グループが作成され、これには以前の組み込みツール バー ([標準] ツール バー、[書式設定] ツール バー、および [] ツール バー) のアイテムが含まれます。アドインまたはドキュメントによって追加されるカスタム ツール バーについては、[アドイン] タブの [カスタム ツール バー] グループに表示されます。

Office アプリケーションの Fluent UI をカスタマイズする

次の方法を使用して、Word 2007、Excel 2007、または PowerPoint 2007 でカスタム アプリケーション レベルの Fluent UIを作成できます。

  • マネージ コードおよびアンマネージ コードで COM アドインを使用する

  • .ppam ファイル, .xlam ファイルなど、アプリケーション固有のアドインを使用する

  • Word 2007 でテンプレート (.dotm files) を使用する

注意

Access 2007 および Outlook 2007 は、Office アプリケーションとは若干違った方法でリボンのユーザー設定を実装しています。

典型的なシナリオでは、COM アドインのコードには、外部カスタム ファイルまたはコード自体に含まれる XML から XML マークアップを返すプロシージャが含まれています。アプリケーションが起動されると、アドインは XML マークアップを返すコードを読み込んで実行します。コードはその XML マークアップを XSD スキーマに照らし合わせて検証し (オプション)、そのうえでメモリに読み込んで、Fluent UI に適用します。そして、変更された Fluent UI が表示されます。Fluent UI のコマンドとコントロールでは、アドインのコードの実行にコールバック プロシージャも使用できます。

ドキュメント レベルのカスタマイズでは、同じ XML マークアップと, .docx, .docm, .xlsx, .xlsm, .pptx、または .pptm のいずれかの拡張子を持つ Office オープン XML ファイル形式を使用します。これらのソリューションでは、XML マークアップを含むカスタマイズ ファイルを作成して、フォルダに保存します。次に、Office オープン XML 形式コンテナの一部を変更して、カスタマイズ ファイルを指すようにします。Office アプリケーションでそのドキュメントを開くと、カスタマイズ ファイルがメモリに読み込まれ、Fluent UI に適用されます。そして、コマンドとコントロールが、ドキュメントに含まれているコードを呼び出して機能を提供します。

コールバックを使用する

コールバックを指定して、実行時に Fluent UI からプロパティを更新したり操作を実行したりします。たとえば、リボンのボタンをクリックしたときに発生するアクションを指定するには、onAction コールバック関数を指定する必要があります。RibbonX マークアップは次のようになっています。

<button id="myButton" onAction="MyButtonOnAction" />

このマークアップは、ボタンがクリックされたときに MyButtonOnAction メソッドを呼び出すよう Office に指示します。MyButtonOnAction メソッドには、選択した言語に従って特定の署名があります。その例を次に示します。

public void MyButtonOnAction (IRibbonControl control)
{
    if (control.Id == "myButton")
    {
        System.Windows.Forms.MessageBox.Show("Button clicked!");
    }
}

注意

どのようにカスタマイズを作成したかによっては、System.Windows.Forms アセンブリへの参照を追加して MessageBox.Show メソッドを呼び出さなければならない場合があります。

MyButtonOnAction プロシージャは public として宣言しなければなりません。control パラメータは、コントロールの一意識別子およびタグのプロパティを持っています。これにより、複数のコントロールで同じコールバック プロシージャを使用できます。

注意

リボン XML カスタマイズ マークアップの属性の大文字と小文字は camel 規約に従って使い分けられ、最初の単語を除いて各単語の先頭文字が大文字になります (onAction、insertBeforeMso など)。

Fluent UI をカスタマイズする 2 とおりの方法

リボンをサポートするアプリケーションには、XML マークアップを使用して Fluent UI をカスタマイズする方法が 2 とおり用意されています。ただし、Access 2007 は除きます。これについてはAccess のアプリケーション レベルのカスタム リボンを作成する説明します。なお、Outlook の場合は、COM アドインのみが Fluent UI をカスタマイズできます。この XML マークアップで指定する変更はすべて徐々に既存の Fluent UI に追加されます。たとえば、カスタム タブを識別する XML マークアップは、ホスト アプリケーションの既存のタブに対してタブを 1 つだけ追加します。

RibbonX マークアップのすべてのコントロールに、次の識別子のいずれかが含まれていなければなりません。

表 1 : コントロールで使用する識別子 (すべてのコントロールでこのいずれかを使用する必要がある)

識別子

説明

id

コントロールの一意識別子を指定します。カスタム コントロールと一緒に使用します。この識別子は、IRibbonControl のプロパティとしてコールバック関数に渡されます。

idMso

組み込みコントロールの識別子を指定します。

idQ

限定識別子を指定します。次の例で示すように、先頭に名前空間の省略名が付きます。

<customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui" xmlns:x="myNameSpace">
<button idQ="x:myButton" … />

注意

この例では、2 つの異なるアドインを同じカスタム グループに追加できるよう名前空間 x を使用しています。このアドインは、修飾名によってカスタム グループを参照するだけですみます。

XML マークアップ ファイルの一般的な書式

XML マークアップを使用すると、Fluent UI をカスタマイズできます。次の例は、Word 2007 で Fluent UI をカスタマイズする XML マークアップ ファイルの一般的な書式です。以降のセクションの例では、このマークアップを使用しています。

<customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab idMso="TabHome">
        <group idMso="GroupFont" visible="false" />
      </tab>
      <tab id="CustomTab" label="My Tab">
        <group id="SampleGroup" label="Sample Group">
          <toggleButton id="ToggleButton1" size="large" 
            label="Large Toggle Button" 
            getPressed="ThisDocument.MyToggleMacro"
            onAction="ThisDocument.MyActionMacro"  />
          <checkBox id="CheckBox1" label="A CheckBox" 
            screentip="This is a check box" 
            onAction="ThisDocument.MyCheckboxMacro" />
          <editBox id="EditBox1" getText="ThisDocument.MyTextMacro" 
            label="My EditBox" onChange="ThisDocument.MyEditBoxMacro"/>
          <comboBox id="Combo1" label="My ComboBox" 
            onChange="ThisDocument.MyComboBoxMacro">
            <item id="Zip1" label="33455" />
            <item id="Zip2" label="81611" />
            <item id="Zip3" label="31561" />
          </comboBox>
          <dialogBoxLauncher>
            <button id="Launcher1" screentip="My Launcher" 
              onAction="ThisDocument.MyLauncherMacro" />
          </dialogBoxLauncher>
        </group>
        <group id="MyGroup" label="My Group" >
          <button id="Button1" label="My Large Button" 
            size="large" onAction="ThisDocument.MyButtonMacro" />
          <button id="Button2" label="My Normal Button" 
            size="normal" onAction="ThisDocument.MyOtherButtonMacro" />
        </group >
      </tab>
    </tabs>
  </ribbon>
</customUI>

この XML マークアップにより、次の図で示すように Fluent UI が変更されます。

図 2. Word の Fluent UI カスタマイズの例

Word におけるリボン UI のカスタマイズ例

この例では、Word 2007 の Fluent UI を次に示す順序で変更しています。

  1. XML マークアップの既定の名前空間が宣言されます。

  2. 組み込み [ホーム] タブの組み込み [GroupFont] グループが非表示になります。

  3. 新しい [CustomTab] タブが、My Tab というラベルが付いた最後の組み込みタブの右側に追加されます。

    注意

    id 識別子属性を使用して、カスタム タブなどのカスタム アイテムを作成します。idMso 識別子属性を使用して、[TabHome] タブなどの組み込みアイテムを参照します。

  4. 新しい [SampleGroup] グループが [My Tab] タブに追加されます。

  5. 大きなサイズの [ToogleButton1] ボタンが [My Group] グループに追加されます。マークアップによって、onAction コールバックおよび getPressed コールバックが指定されます。

  6. [CheckBox1] チェック ボックスが、カスタム ヒントと共に [My Group] グループに追加されます。また、onAction コールバックも指定されます。

  7. [EditBox1] エディット ボックスが [My Group] グループに追加され、onChange コールバックが指定されます。

  8. [Combo1] ボックスが、3 つのアイテムと共に [My Group] グループに追加され、onChange コールバックが指定されます。

  9. [Launcher1] 起動ツールが [My Group] グループに追加され、onAction コールバックが設定されます。

    通常、起動ツールはカスタム ダイアログ ボックスを表示し、より多くのオプションをユーザーに提示します。

  10. 新しい [My Group] グループがカスタム タブに追加されます。

  11. 大きなサイズの [Button1] ボタンが [My Group] グループに追加され、getText コールバックおよび onAction コールバックが指定されます。

  12. 標準サイズの [Button2] ボタンが [My Group] グループに追加され、onAction コールバックが指定されます。

RibbonX マークアップは、検証 XML エディタで作成するのが最も簡単です。Microsoft Visual Studio 2005 にはこうしたエディタが用意されており、必要なスキーマ (XSD) ファイルがあれば使用できます。この場合、customUI.xsd の現在のコピーが必要ですが、これは複数の場所で入手できます。たとえば、このスキーマは、Microsoft Visual Studio 2005 Tools for the 2007 Microsoft Office System (Visual Studio 2005 Tools for Office Second Edition) をインストールするときに、Visual Studio スキーマ カタログに追加されるため、既定では Visual Studio プロジェクトから入手できます。また、「Microsoft Office Developer Center: Ribbon」Web サイトから入手することもできます。Visual Studio で新しい XML ファイルを作成したら、プロパティ ウィンドウで、customUI.xsd ファイルを含めるように Schemas プロパティを設定します (または、前の XML ドキュメントで示したように、コードにスキーマ参照を入力します)。そして、XML コンテンツをファイルに入力すると、Microsoft IntelliSense テクノロジを利用できるようになります。また、XML Notepad 2006 も便利です。これは、「Microsoft ダウンロード センター」から入手できます。このツールを使用すると、ツリー形式で XML コンテンツを編集および表示できます。

Office オープン XML 形式のファイルを使用して、Fluent UI をカスタマイズする

ドキュメント レベルで XML マークアップを使用して Fluent UI をカスタマイズする手順を次に示します。詳細については、後の「ドキュメント ベースのアドインを Fluent UI に追加する」を参照してください。この手順では、前のセクションで説明した XML マークアップを使用します。

注意

Office オープン XML 形式の構造での動作を把握しておくと便利ですが、この手順は省略できます。OpenXMLDeveloper.org (英語) から入手できる Custom Fluent UI Editor を利用すれば、ドキュメントを開いて、カスタム UI を挿入し、RibbonX マークアップで適切な場所にドキュメントを保存できます。この例で示す手順は、このツールによって実行されます。また、カスタム アイコンを customUI フォルダに追加し、そのアイコンを簡単に参照することも可能です。この Custom UI Editor は、OpenXMLDeveloper.org の「Custom UI Editor Tool (英語)」Web ページからダウンロードできます。

Office オープン XML 形式のファイルを使用して、Fluent UI をカスタマイズするには

  1. デスクトップに customUI という名前のフォルダを作成します。

  2. 任意のテキスト エディタで、新しいコンポーネントを Fluent UI に追加するか、既存のコンポーネントを変更するか、またはコンポーネントを非表示にする XML マークアップを記述して、カスタマイズ ファイルを作成します。前の例で示した XML マークアップを使用すると、動作をテストできます。ファイルを customUI.xml として (または、その他の任意の名前で)、作成したフォルダに保存します。

  3. XML マークアップをカスタム Fluent UI スキーマに照らし合わせて検証します (オプション)。

  4. Office アプリケーションでドキュメントを作成し、Office オープン XML 形式として保存します。拡張子は, .docx, .docm, .xlsx, .xlsm, .pptm, .pptx のいずれかになります。

    ている各コントロールでは、コールバック プロシージャへ "m" が付きます。これらのファイルには、RibbonX コマンドおよびコントロールで呼び出せるプロシージャを含めることができます。

    注意事項

    ユーザーによるリボンのユーザー設定操作に対応するコードを追加する必要がある場合は、マクロ有効形式でドキュメントを保存する必要があります。この機能を備えたドキュメントには, .docm, .xlsm、および .pptm 形式があります。この記事で紹介する Microsoft Visual Basic for Applications (VBA) コードを含むすべての例について、このいずれかの形式でホスト ドキュメントを保存してください。

  5. Office アプリケーションを終了します。

  6. Microsoft Windows エクスプローラで、ファイル名拡張子 .zip をドキュメント ファイル名に追加し、そのファイルをダブルクリックして圧縮フォルダとして開きます。

  7. [customUI] フォルダをデスクトップから圧縮フォルダにドラッグして、カスタマイズ ファイルをコンテナに追加します。

  8. [_rels] フォルダをデスクトップにドラッグします。.rels ファイルが含まれる _rels という名前のフォルダが、デスクトップに表示されます。

  9. 新しいフォルダを開き、テキスト エディタで .rels ファイルを開きます。

  10. 最後の <Relationship> 要素と終了 <Relationships> 要素の間に、ドキュメント ファイルとカスタマイズ ファイル間のリレーションシップを作成する行を追加します。フォルダ名とファイル名は必ず正しく指定してください (Id 属性により customUI のリレーションシップ ID (任意の値) が指定されます)。

    <Relationship Type="https://schemas.microsoft.com/office/2006/
      relationships/ui/extensibility" Target="/customUI/customUI.xml" 
      Id="customUIRelID" />
    
  11. .rels ファイルを保存します。

  12. .rels ファイルをデスクトップから圧縮ファイルの [_rels] フォルダにドラッグし、既存の .rels ファイルと置き換えます。

  13. .zip 拡張子をコンテナ ファイルから削除します。

Office アプリケーションでファイルを開くと、カスタマイズされた UI が表示されます。この例の前のセクションで取り上げたマークアップを使用すると、アプリケーションの設定によっては、ドキュメントを開いたときに警告メッセージが表示されることがあります。これまでに指定したコードは多様なコールバック プロシージャに対応しているわけではありません。したがって、作成されたカスタム UI はまだ完全ではありません。

ドキュメント ベースのアドインを Fluent UI に追加する

カスタム マクロを呼び出すことができ、Excel 2007 のシンプルなカスタム UI が含まれるドキュメントを作成する基本的な手順を次に示します。

  1. Excel マクロ有効ブックを作成し、マクロを 1 つ設定します。

  2. ファイルを作成し、そのファイルに 1 つのタブ、1 つのグループ、および 1 つのボタンを追加してカスタマイズします。

  3. ボタンがクリックされたときに Fluent UI によって呼び出されるプロシージャを VBA で作成します。

  4. ボタンのマークアップで onAction コールバック属性を指定します。これにより、ドキュメントで作成したマクロが呼び出されます。

  5. マクロ有効ドキュメント コンテナのコンテンツを変更し、Fluent ID をカスタマイズするファイルを追加します。

  6. マクロ有効ファイルを保存し、Excel 2007 で開きます。

注意

Word または PowerPoint のマクロ有効ドキュメントを作成するときも、これと同じ基本手順に従うことができます。

Excel マクロ有効ブックを作成するには

  1. Excel 2007 を起動します。

  2. [開発] タブをクリックし、[Visual Basic] をクリックします。

    注意

    [開発] タブが表示されない場合は、自身を開発者として認定する必要があります。アプリケーションでこの操作を行うには、Microsoft Office ボタン、[Application のオプション]、[基本設定] の順にクリックし、[[開発] タブをリボンに表示する] を選択します。これは、Fluent UI を実装するすべての Office アプリケーションで自身を開発者として認定するグローバル設定です。

  3. Visual Basic Editor で、ThisWorkbook をダブルクリックしてコード ウィンドウを開きます。

  4. 次の VBA 関数を入力してから、ツール バーの左隅にある [Excel] アイコンをクリックし、Excel に戻ります。

    Sub MyMacro(ByVal control as IRibbonControl)
       MsgBox("Hello World")
    End Sub
    
  5. ファイル名拡張子が .xlsm のマクロ有効ブックとしてドキュメントを保存します。

    注意

    標準の .xlsx ドキュメントとして保存すると、マクロ コードを実行できなくなります。ドキュメントを保存するときは、[名前を付けて保存] メニュー オプションを明示的に選択し、[Excel マクロ有効ブック (*.xlsm)] を選択します。

  6. Excel を終了します。

XML マークアップを含むファイルを作成し、Fluent UI を変更するには

  1. デスクトップに customUI という名前のフォルダを作成します。

  2. 新しいテキスト ファイルを作成し、次の XML を追加して、そのファイルをデスクトップ上の [customUI] フォルダに customUI.XML として保存します。

    <customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui"> 
      <ribbon startFromScratch="true"> 
        <tabs> 
          <tab id="CustomTab" label="My Tab"> 
            <group id="SimpleControls" label="My Group"> 
              <button id="Button1" imageMso="HappyFace" size="large" 
                label="Large Button" 
                onAction="ThisWorkbook.MyMacro" /> 
            </group> 
          </tab> 
        </tabs> 
      </ribbon> 
    </customUI>
    

マクロ有効ファイルのコンテナに含まれるファイルを変更するには

  1. Windows エクスプローラで、作成したマクロ有効ファイルを見つけます。.zip 拡張子を追加して、ファイルの名前を変更します。

  2. Windows エクスプローラで、ファイルをダブルクリックして開きます。

  3. [customUI] フォルダをデスクトップから圧縮フォルダにドラッグし、メッセージの指示に従って [追加] をクリックして、カスタマイズ ファイルをコンテナに追加します。

  4. [_rels] フォルダをデスクトップにドラッグします。

  5. 新しいフォルダを開き、テキスト エディタで .rels ファイルを開きます。

  6. 最後の <Relationship> 要素と </Relationships> 要素の間に次のテキストを追加し、ファイルを保存して閉じます。

    <Relationship Id="customUIRelID" Type="https://schemas.microsoft.com/office/2006/relationships/ui/extensibility" 
    Target="customUI/customUI.xml" />
    
  7. .rels ファイルをデスクトップから圧縮ファイルの _rels フォルダにドラッグし、既存の .rels ファイルと置き換えます。

  8. .zip 拡張子をコンテナ ファイル名から削除します。

  9. Excel 2007 でマクロ有効ファイルを開きます。カスタム UI によって組み込み Fluent UI が置き換えられます。

    注意

    セキュリティ設定によっては、マクロが無効にされていることを通知するセキュリティ警告が表示されることがあります。その場合は、警告の横に表示される [オプション] をクリックし、[このコンテンツを有効にする] を選択して、[OK] をクリックします。

  10. [大きいボタン] をクリックします。ボタンをクリックすると、onAction コールバックがトリガされます。これにより、ブックのマクロが呼び出され、"Hello World" というメッセージが表示されます。

COM アドインで Fluent UI をカスタマイズする

アプリケーション レベルでカスタマイズすると、どのドキュメントが開いているかに関係なく、アプリケーションに表示される Fluent UI が変更されます。こうした変更には、一般的には、COM アドインを使用します。COM アドインは、通常、マネージ コードを使用して 2 とおりの方法で作成できます。1 つは Visual Studio 2005 の [共有アドイン] テンプレートを使用する方法、もう 1 つは Visual Studio 2005 Tools for Office Second Edition を使用する方法です。なお、後者の方法の方が簡単にアドインを作成できます。次の手順では、リボンをカスタマイズする COM アドインの、基本となるメソッド呼び出しシーケンスを説明します。どの方法でアドインを作成してもその概念に変わりはありませんが、記述しなければならない具体的なコードは違ってきます。そこで、この記事の後のセクションでは、両方の技術を使用したアドインの作成例を紹介します。

COM アドインを使用して、Fluent UI をカスタマイズするには

  1. COM アドイン プロジェクトを作成します。

    作成するアドインは Extensibility.IDTExtensibility2 インターフェイスおよび IRibbonExtensibility インターフェイス (Microsoft.Office.Core 名前空間にあります) を実装する必要があります。

  2. アドインおよび Setup プロジェクトを構築し、プロジェクトをインストールします。

  3. Office アプリケーションを起動します。

以前のバージョンの Office と同じように、アドインの読み込み時には IDTExtensibility2::OnConnection イベントが呼び出され、これによりアドインが初期化されます。

次に、Office により QueryInterface メソッド (アンマネージ アドイン用) または QueryService メソッド (マネージ アドイン用) のいずれかが呼び出されます。このメソッドは、アドインが IRibbonExtensibility インターフェイスを実装するかどうかを決定します。実装する場合は IRibbonExtensibility::GetCustomUI メソッドが呼び出されます。このメソッドは、XML マークアップを (XML カスタマイズ ファイルまたは、プロシージャに埋め込まれた XML マークアップから) 返し、カスタマイズされた Fluent UI がアプリケーションに読み込まれます。そして、カスタマイズされた UI をユーザーが利用できるようになります。

注意事項

リボン コールバック メカニズムの内部アーキテクチャのため、GetCustomUI メソッド内では、リボンの XML マークアップを準備して返す以外の初期化作業を行わないようにすることが重要です。特に、ダイアログ ボックスまたはメッセージ ウィンドウは、コールバック メソッド内からは表示しないでください。

XML マークアップで指定されている各コントロールでは、コールバック プロシージャへの呼び出しによって機能が公開されます。たとえば、ボタン コントロールの XML マークアップは、ユーザーがボタンをクリックしたときに実行されるプロシージャを指す onAction 属性を指定できます。コールバック プロシージャは、ほとんどの場合、コントロールを識別する IRibbonControl インターフェイスを公開しています。また、コールバックは、他の引数、たとえばトグル ボタンの状態 (押されている状態または押されていない状態) を指定するブール オブジェクトなどを渡すこともあります。IRibbonControl インターフェイスは、Context オブジェクト、Id オブジェクト、Tag プロパティの 3 つのプロパティを実装しています。Context オブジェクトは、コールバックをトリガするリボンが含まれるアクティブ ウィンドウです。Id オブジェクトは、マークアップで指定されているカスタム コントロールの文字列識別子です。Tag プロパティは一意ではなく、オプションでマークアップを指定できます。

Access 2007 の UI カスタマイズ

Access 2007 の RibbonX をカスタマイズする際のオプションの中には、他のアプリケーションと同じで共有されているものがありますが、重要な違いもいくつかあります。他のアプリケーションと同じように、Access の Fluent UI は XML マークアップを使用してカスタマイズできます。他のアプリケーションと同様、XML マークアップを含む外部ファイルまたは COM アドインを使用して、リボンのユーザー設定をアプリケーションに統合します。ただし、他の Office アプリケーションとは異なり、Access データベース ファイルはバイナリで、Office オープン XML 形式で開くことができないため、部分的にデータベース ファイルに追加することで Access リボンをカスタマイズすることはできません。

Access では、柔軟に Fluent UI をカスタマイズできます。たとえば、カスタマイズ マークアップをテーブルに格納したり、VBA プロシージャに埋め込んだり、他の Access データベースに格納したりできます。また、Excel ワークシートからリンクすることも可能です。アプリケーションのカスタム UI を全体的に、または特定のフォームまたはレポートに対して指定することもできます。

次に紹介するシナリオは、Access UI をカスタマイズする際の参考としてお使いください。

注意

ここで紹介するチュートリアルでは、データベースに対して変更を加える必要があります。したがって、これらの手順は運用データベース以外で、たとえばサンプル データベースのバックアップ コピーを使用して実行するようにしてください。

Access の Fluent UI をカスタマイズする

Access UI のカスタマイズは 2 とおりの方法で行うことができます。1 つはカスタマイズを特別なテーブルに格納し、Access でマークアップを自動的に読み込ませる方法です。もう 1 つはカスタマイズを格納する場所を選択し、Application.LoadCustomUI メソッドを呼び出すことで、マークアップを手動で読み込む方法です。

Access でカスタマイズを自動的に読み込む場合は、USysRibbons という名前のテーブルにカスタマイズを格納する必要があります。このテーブルには、2 つの列があります。1 つは RibbonName 列という名前の Text 列で、この列には 255 文字を格納できます。もう 1 つは RibbonXML という名前の Memo 列です。リボン名は RibbonName 列に、リボン マークアップは RibbonXML 列に入力します。データベースを閉じて再度開くと、[Access のプロパティ] ダイアログ ボックスで、使用する既定のリボンを選択できます。ここでは、任意のフォームまたはレポートの選択時に表示されるリボンを、そのフォームまたはレポートのプロパティとして選択できます。

より動的な方法を使用する場合は、LoadCustomUI メソッドを呼び出します。このメソッドは、XML コンテンツがテーブルに格納されているかどうかにかかわらず、リボンのユーザー設定を読み込みます。LoadCustomUI を呼び出してユーザー設定を読み込んだら、指定したユーザー設定を実行時にプログラムによって割り当てることができます。

注意

LoadCustomUI メソッドを使用して読み込んだユーザー設定は、データベースが開いているときにのみ使用できます。したがって、データベースを開くたびに LoadCustomUI を呼び出す必要があります。この方法は、実行時にカスタム UI を割り当てる必要があるアプリケーションに役立ちます。

LoadCustomUI メソッドの署名を次に示します。

expression.LoadCustomUI(CustomUIName As String, CustomUIXML As String)

expression は Application オブジェクトを返します。

CustomUIName は、このマークアップに関連付けられるカスタム リボン ID の名前です。

CustomUIXML には、XML カスタマイズ マークアップが含まれます。

LoadCustomUI メソッドの使用例については、実行時にユーザー設定を読み込む紹介します。

次の手順では、一般化された方法で、Access にアプリケーション レベルのカスタマイズを追加しています。完全なチュートリアルについては、以降のセクションで紹介します。

カスタマイズされたアプリケーション レベルのリボンをデザイン時に適用するには

  1. USysRibbons という名前のテーブルを作成し、前に説明した列を作成します。使用可能にするリボンごとに行を追加します。

  2. データベースを閉じて、再度読み込みます。

  3. Microsoft Office ボタン をクリックし、[Access のオプション] をクリックします。

  4. [リボンとツール バーのオプション] セクションで [カレント データベース] をクリックし、[リボン名] ボックスの一覧でリボンのいずれかをクリックします。

既存のユーザー設定を削除して、データベースが既定の Fluent UI を使用するように設定するには、[リボン名] ボックスの一覧から既存のリボン名を削除し、そのまま何も指定せず空のままにしておきます。

次の手順では、一般化された方法で、Access にフォーム レベルまたはレポート レベルのカスタマイズを追加しています。

特定のカスタム リボンをフォームまたはレポートに割り当てるには

  1. 前に説明した手順に従って、USysRibbons テーブルを追加し、カスタマイズされたリボンをアプリケーションで使用できるようにします。

  2. デザイン ビューでフォームまたはレポートを開きます。

  3. [デザイン] タブで、[プロパティ シート] をクリックします。

  4. プロパティ ウィンドウの [その他] タブで、[リボン名] ボックスの一覧のリボンのいずれかをクリックします。

  5. フォームまたはレポートを保存して閉じ、再度開きます。選択した UI が表示されます。

    注意

    Fluent UI に表示されるタブは付加的なものです。つまり、タブを特に非表示にしない限り、または Start from Scratch 属性を True に設定しない限り、フォームまたはレポートの UI によって表示されるタブは、既存のタブと一緒に表示されます。

この手順をさらに詳しく確認するには、以降の例を実行してください。

この例の前半では、カスタム UI を読み込むときに発生したエラーをレポートするオプションを設定しています (ここでは Access で手順を実行していますが、同様の手順を他のアプリケーションで実行することもできます)。

Access のアプリケーション レベルのカスタム リボンを作成する

Access のアプリケーション レベルのカスタム リボンを作成するには

  1. Access を起動します。既存のデータベースを開くか、新しいデータベースを作成します。

  2. Microsoft Office ボタン をクリックし、[Access のオプション] をクリックします。次に、[詳細設定] タブをクリックします。

  3. [全般] セクションで、[アドイン ユーザー インターフェイスのエラーを表示する] をクリックします (このオプションの場所は、アプリケーションによって異なることがあります)。

  4. [OK] をクリックして [Access のオプション] ダイアログ ボックスを閉じます。

    次に、カスタマイズ XML マークアップが含まれるテーブルを作成します。

  5. Access でデータベースを開いたまま、ナビゲーション ウィンドウを右クリックします。[ナビゲーション オプション] をポイントし、[システム オブジェクトの表示] をクリックします。(ナビゲーション ペインに USysRibbons テーブルを表示するには、このオプションを設定する必要があります。) [OK] をクリックして、ダイアログ ボックスを閉じます。Access のシステム テーブルがナビゲーション ウィンドウに表示されます。

  6. [作成] タブで [テーブル デザイン] をクリックします。

  7. 次のフィールドをテーブルに追加します。

    表 2. USysRibbons テーブルのフィールドの定義

    フィールド名

    種類

    ID

    オートナンバー型

    RibbonName

    テキスト型

    RibbonXml

    メモ型

  8. ID フィールドを選択します。[デザイン] タブで、[主キー] を選択します。

  9. Microsoft Office ボタン をクリックし、[保存] をクリックします。新しいテーブルに USysRibbons という名前を付けます。

  10. [USysRibbons] タブを右クリックし、[データシート ビュー] をクリックします。

  11. 作成したフィールドに次のデータを追加します。

    表 3. USysRibbons テーブルのデータ

    フィールド名

    ID

    (オートナンバー型)

    RibbonName

    HideData

    RibbonXml

    <customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui">
        <ribbon startFromScratch="false">
            <tabs>
                <tab idMso="TabCreate" visible="false" />
                <tab id="dbCustomTab" label="A Custom Tab" visible="true">
                    <group id="dbCustomGroup" label="A Custom Group">
                        <control idMso="Paste" label="Built-in Paste" enabled="true"/>
                    </group>
                </tab>
            </tabs>
        </ribbon>
    </customUI>
    

    このマークアップにより、startfromScratch 属性が False に設定され、組み込みの [作成] タブが非表示になります。そして、カスタム タブとカスタム グループが作成され、組み込みの [貼り付け] コントロールがグループに追加されます。

  12. テーブルを閉じます。

  13. データベースを閉じて、再度開きます。

  14. Microsoft Office ボタン をクリックし、[Access のオプション] をクリックします。

  15. [カレント データベース] タブをクリックし、下にスクロールして [リボンとツール バーのオプション] セクションを表示します。

  16. [リボン名] ボックスの一覧の [HideData] をクリックします。[OK] をクリックして、ダイアログ ボックスを閉じます。

  17. データベースを閉じて、再度開きます。

    [編集] グループは表示されず、Fluent UI には、[カスタム タブ] タブが表示されます。このタブには、[カスタム グループ] グループと [組み込み貼り付け] ボタンがあります。

    図 3. Access のアプリケーション レベルの UI

    Access アプリケーション レベルのリボン UI

  18. クリーンアップするには、前の手順をいくつか繰り返して [Access のオプション] ダイアログ ボックスを表示します。[リボン名] オプションの内容を削除してから、データベースを閉じて再度開くと、既定の Fluent UI が表示されます。

    注意

    USysRibbons テーブルのリボンを使用して、特定のフォームまたはレポートに対して UI を指定することも可能です。これを行うには、デザイン モードまたはレイアウト モードでフォームを開き、フォームの RibbonName プロパティを、使用するリボンの名前に設定します。このプロパティを設定するには、フォーム上のコントロールまたはセクションではなく、フォーム自体を選択する必要があります。

実行時にユーザー設定を読み込む

実行時に静的なユーザー設定を読み込むには、USysRibbons テーブルにそのユーザー設定を格納し、必要に応じてフォームまたはレポートの RibbonName プロパティを設定します。ただし、動的なユーザー設定を作成する必要がある場合は、Application.LoadCustomUI メソッドを呼び出します。次の例では、アプリケーションの各フォームにボタンを表示するリボンのユーザー設定を作成し、ボタンごとに onAction コールバックを処理して、要求されたフォームを読み込んでいます。

動的なリボンのユーザー設定を作成するには

  1. 前のセクションで作業していたデータベースを、Access 2007 に読み込みます。データベースに複数のフォームがない場合は、新しいフォームを作成し、1 つまたは 2 つのコントロールを各フォームに追加します。

  2. [作成] タブの [その他] グループで、[マクロ] ボタンのドロップダウン リストをクリックし、[モジュール] をクリックします。

  3. Visual Basic Editor で、[表示] メニューの [プロパティ ウィンドウ] をクリックします。

  4. プロパティ ウィンドウの Name プロパティ ボックスで、モジュールの名前を RibbonLoader に変更します。

  5. コード ウィンドウで、次のコードを挿入します。このメソッドは値を返しません。これは関数である必要があります。そうでない場合、Access マクロで呼び出すことはできません。

    Function CreateFormButtons()
      Dim xml As String
      xml = _
       "<customUI https://schemas.microsoft.com/" & _
       "office/2006/01/customui"">" & vbCrLf & _
       "  <ribbon startFromScratch=""false"">" & vbCrLf & _
       "    <tabs>" & vbCrLf & _
       "      <tab id=""DemoTab"" label=""LoadCustomUI Demo"">" & _
         vbCrLf & _
       "        <group id=""loadFormsGroup"" label=""Load Forms"">" & _
         vbCrLf & _
       "{0}" & vbCrLf & _
       "        </group>" & vbCrLf & _
       "      </tab>" & vbCrLf & _
       "    </tabs>" & vbCrLf & _
       "  </ribbon>" & vbCrLf & _
       "</customUI>"
    
      Dim template As String
      template = "<button id=""load{0}Button"" " & _
       "label=""Load {0}"" onAction=""HandleOnAction"" " & _
       "tag=""{0}""/>" & vbCrLf
    
      Dim formContent As String
      Dim frm As AccessObject
      For Each frm In CurrentProject.AllForms
        formContent = formContent & _
         Replace(template, "{0}", frm.Name)
      Next frm
    
      xml = Replace(xml, "{0}", formContent)
      Debug.Print xml
      On Error Resume Next
      ' If you call this code from the AutoExec macro,
      ' the only way it can fail is if you have a
      ' customization with the same name in the
      ' USysRibbons table.
      Application.LoadCustomUI "FormNames", xml
    End Function
    

    アプリケーションに Form1 および Form2 の 2 つのフォームが含まれている場合、コードを実行すると、次の XML のようなマークアップが作成されます。

    <customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui">
      <ribbon startFromScratch="false">
        <tabs>
          <tab id="DemoTab" label="LoadCustomUI Demo">
            <group id="loadFormsGroup" label="Load Forms">
              <button id="loadForm2Button" label="Load Form2" 
                onAction="HandleOnAction" tag="Form2"/>
              <button id="loadForm1Button" label="Load Form1" 
                onAction="HandleOnAction" tag="Form1"/>
            </group>
          </tab>
        </tabs>
      </ribbon>
    </customUI>
    

    このマークアップにより、新しい [LoadCustomUI デモ] タブが作成されます。このタブには [フォームの読み込み] グループが含まれます。そのグループには、アプリケーションのフォーム (Form1 および Form2) ごとにボタンが表示され、ボタンがクリックされたときに HandleOnAction コールバック プロシージャが呼び出されることを示します。さらに、このマークアップは、コードを開く Access フォームの名前がボタンに示されるよう各ボタンの Tag 属性を設定します。

  6. 次のプロシージャを同じモジュールに追加します。このプロシージャは、コールバックの動作を指定します。このコードでは、選択されたフォームを開き、リボンのユーザー設定として RibbonName プロパティを FormNames に設定しています。

    Public Sub HandleOnAction(control As IRibbonControl)
        ' Load the specified form, and set its
        ' RibbonName property so that it displays
        ' the custom UI.
        DoCmd.OpenForm control.Tag
        Forms(control.Tag).RibbonName = "FormNames"
    End Sub
    
  7. データベースを保存し、Visual Basic Editor を閉じます。

  8. アプリケーションには少なくともフォームが 2 つ必要です。フォームの数が 2 つに満たない場合は、少なくとも 2 つになるまでフォームを作成します。

  9. どのフォームをアプリケーションのスタートアップ フォームにするかを決め、デザイン ビューでそのフォームを開きます。

  10. プロパティ ウィンドウの [イベント] タブで、onLoad イベント プロパティを探します。プロパティ値の右側にある省略記号 ([...]) のボタンをクリックし、オプションの一覧から [コード ビルダ] を選択して [OK] をクリックします。(プロパティ ウィンドウが表示されない場合は、[デザイン] タブで [プロパティ シート] をクリックします。)

  11. Visual Basic Editor で、Form_Load プロシージャを次のように変更します。

    Private Sub Form_Load()
        CreateFormButtons
        Me.RibbonName = "FormNames"
    End Sub
    
  12. [ツール] メニューの [参照設定] をクリックします。[Microsoft Office 12.0 オブジェクト ライブラリ] (IRibbonControl クラスを使用するにはこのオブジェクトへの参照が必要) を選択し、[OK] をクリックします。

  13. データベースを保存し、Visual Basic Editor を閉じます。

  14. Microsoft Office ボタン をクリックし、[Access のオプション] をクリックします。

  15. [カレント データベース] タブをクリックします。

  16. [アプリケーション オプション] セクションで、[フォームの表示] ボックスの一覧からスタートアップ フォームを選択し、[OK] をクリックします。

  17. データベースを閉じて、再度開きます。

    カスタム タブが含まれるスタートアップ フォームが開きます。カスタム タブには、アプリケーションの各フォームに対応するボタンのグループが表示されています。ボタンのいずれかをクリックすると、同じカスタム UI を維持したまま対応するフォームが開きます。

リボンのユーザー設定は、ここで説明した方法のほかに COM アドインを使用して Access に追加できます。COM アドインには、各アプリケーションに VBA コードを追加せずに、カスタム RibbonX 機能をパッケージとして追加できるというメリットがあります。アドインは、他の Office アプリケーションと同じように Access で実装されています。

注意

Access の COM アドインは、Visual Studio 2005 の [共有アドイン] テンプレートで作成できますが、Visual Studio 2005 Tools for Office Second Edition で作成することはできません。Access は、Visual Studio 2005 Tools for Office Second Edition ではサポートされていません。

その他のアプリケーションのリボンのユーザー設定シナリオ

ニーズに合わせて Fluent UI を変更する方法を示す次のシナリオについて考えてみます。

注意

次のシナリオでは、この記事の「Office アプリケーションの Fluent UI をカスタマイズする」セクションで説明した方法を使用して、リボンのユーザー設定の動作を示しています。

カスタム ソリューションを作成する

これまでの例では既存のリボンを変更してきましたが、UI 全体をゼロから作成することもできます。ゼロから作成する作業は、独自の UI を作成し、独自のリボン レイアウトをデザインする必要がある場合に行います。リボン要素の startFromScratch 属性を True に設定すると、すべてのコンテンツが非表示になります (したがって、すべてを非表示にする作業を手動で行う必要はありません)。startFromScratch 属性を True に設定すると、次の変更が行われます。

  • [アドイン] タブを含め、既存のリボン タブすべてが非表示になります。

  • [新規作成]、[開く]、[上書き保存]、[Application のオプション]、および [終了] コマンドのみが表示されるように Microsoft Office メニューが変更されます。

    注意事項

    XML マークアップ ファイルでも、Microsoft Office メニューのコントロールを非表示にするよう指定できます。この変更は、XML マークアップで目的のコントロールの Visible 属性を False に設定することで、明示的に要求する必要があります。これらのコマンドを非表示にすると、アプリケーションを閉じるかソリューションをアンインストールすることでしか解決できない、回復不可能な状態にアプリケーションが陥る場合があります。

startFromScratch 属性を設定しても、ステータス バーは変更されず、現状が維持されます。

次の XML マークアップの例では、startFromScratch 属性を使用して、Fluent UI をカスタマイズしています。

<customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui" >
  <ribbon startFromScratch="true" >
    <tabs>
      <tab id="CustomTab" label="My Tab" >
        <group id="SimpleControls" label="My Group">
          <toggleButton id="ToggleButton1"
            size="large" label="Large Toggle Button"/>
          <button id="Button2" label="My Button " />
          <comboBox id="Combo1" label="ComboBox">
            <item id="Month1" label="January" />
            <item id="Month2" label="February" />
            <item id="Month3" label="March" />
          </comboBox>
        </group>
      </tab>
    </tabs>
  </ribbon>
</customUI>

この例では、Fluent UI のすべての組み込みコンポーネントを非表示にして、カスタム タブ、1 つのグループ、およびさまざまなコントロールと置き換えています。

タブを非表示にする

次の例のようにマークアップを使用すると、組み込みタブまたはカスタム タブを表示または非表示にできます。

<tab idMso="TabHome" visible="false" />

プログラムによってタブ (または他の要素) を表示または非表示にするには、コールバック プロシージャを指定します。つまり、次の XML のように要素を定義します。

<tab idMso="TabInsert" getVisible="getVisibleCallback" />

そして、アドイン、または VBA コード内で、アイテムを非表示にするかどうかを示すブール値を返すプロシージャを指定できます。たとえば、次のコードを使用すると、週末に Word 2007 の [挿入] タブを非表示にできます。

Public Sub getVisibleCallback(control As IRibbonControl, _
    ByRef visible As Variant)
    Select Case DatePart("w", Date)
        Case vbSaturday, vbSunday
            visible = False
        Case Else
            visible = True
    End Select
End Sub

グループを表示または非表示にする

次の例のようにコードを (前の例のコールバック プロシージャと一緒に) 使用すると、組み込みグループまたはカスタム グループを表示または非表示にできます。

<tab idMso="TabView">
  <group idMso="GroupDocumentViews" visible="false" />
  <group id="MyCustomGroup" label="Custom Group" 
    getVisible="getVisibleCallback" />
</tab>

カスタム タブを追加する

次のコードを使用すると、カスタム タブを追加できます。

<tab id="CustomTab" label="My Tab" />

コントロールを備えたカスタム グループを追加する

次のコードを使用すると、カスタム グループを追加し、組み込みコントロールを追加できます。

<group id="CustomGroup" label="My Group"> 
   <toggleButton idMso="Italic" /> 
   <toggleButton idMso="Bold" /> 
   <button idMso="FileSave" /> 
</group> 

次のコードを使用すると、カスタム グループを追加し、カスタム コントロールを追加できます。

<group id="CustomGroup" > 
   <toggleButton id="MyToggleButton" size="large" 
     label="Insert My Object"/> 
   <checkBox id="AllowChanges" label="Allow Changes" /> 
   <dropDown id="ChooseDepartment" showLabel="true" 
     label="Choose Department"> 
      <item id="Dept1" label="Shipping" /> 
      <item id="Dept2" label="Accounting" /> 
      <item id="Dept3" label="Engineering" /> 
   </dropDown> 
</group>

入れ子になったメニューおよびコントロールを備えたカスタム メニューを作成する

次のコードを使用すると、カスタム グループを作成し、入れ子になった組み込みメニューとコントロール、およびカスタム メニューとコントロールを追加できます。このマークアップには、テキスト付きまたはテキストなしの 2 つのメニュー セパレータも含まれています。

<menu id="MyMenu" label="Test Menu" itemSize="normal"> 
   <toggleButton idMso="Bold"/> 
   <button id="MenuButton1" label="Button1" /> 
   <menuSeparator id="separator1"/>
   <toggleButton id="MenuToggleButton1" label="ToggleButton" /> 
   <button idMso="FileExit"/> 
   <menu id="Nested1" label="Advanced" itemSize="normal"> 
      <button idMso="Cut"/> 
      <button idMso="Copy"/> 
      <button idMso="Paste"/> 
      <menuSeparator id="separator2" title="Large Buttons Below"/>
        <menu id="Nested2" label="Large" itemSize="large"> 
        <button idMso="Cut"/> 
         <button idMso="Copy"/> 
        <button idMso="Paste"/> 
      </menu> 
   </menu> 
</menu>

入れ子になったアイテムを備えたコンボ ボックスまたはドロップダウン ボックスを追加する

次のコードを使用すると、アイテムを備えた組み込みコンボ ボックスを追加できます (ドロップダウン コントロールも同様の構文を使用します)。

<comboBox id="ComboBox1" label="ComboBox"> 
    <item id="item1" label="one" imageMso="_1" /> 
    <item id="item2" label="two" imageMso="_2" /> 
    <item id="item3" label="three" imageMso="_3" /> 
</comboBox>

アイテムを備えたカスタム ギャラリー コントロールを追加する

次のコードを使用すると、アイテムを備えたギャラリー コントロールを追加し、カスタム ボタン コントロールを追加できます。

<gallery id="MonthGallery" imageMso="DateAndTimeInsert" 
  label="Pick a Month:" columns="3" rows="4" onAction="InsertMonth" >
  <item id="Month1" label="January"/>
  <item id="Month2" label="February"/>
  <item id="Month3" label="March"/>
  <item id="Month4" label="April"/>
  <item id="Month5" label="May"/>
  <item id="Month6" label="June"/>
  <item id="Month7" label="July"/>
  <item id="Month8" label="August"/>
  <item id="Month9" label="September"/>
  <item id="Month10" label="October"/>
  <item id="Month11" label="November"/>
  <item id="Month12" label="December"/>
  <button id="InsertMonthButton" 
    label="Insert current month" onAction="InsertCurrentMonth"/>
</gallery>

次の VBA プロシージャは、ギャラリー アイテムおよびギャラリー内のボタンのコールバックの動作を指定しています。

Sub InsertMonth(control As IRibbonControl, _
    selectedId As String, selectedIndex As Integer)

    Dim text As String
    Select Case control.ID
        Case "MonthGallery"
            text = monthName(selectedIndex + 1)
    End Select
    Selection.InsertAfter text
End Sub

Sub InsertCurrentMonth(control As IRibbonControl)
    Select Case control.ID
        Case "InsertMonthButton"
            text = monthName(DatePart("m", Date))
    End Select
    Selection.InsertAfter text
End Sub

注意

ギャラリーを定義するときは、ボタン要素の前にすべてのアイテム要素が表示される必要があります。

ギャラリー コントロールのデータは、実行時にコールバックを使用して設定できます。getItemCount コールバックを使用すると、表示するアイテムの数を決めることができます。また、getItemHeight および getItemWidth コールバックはギャラリー内のアイテムの高さと幅を、getItemImage および getItemLabel コールバックは各アイテムのイメージとラベルを、getSelectedItemID および getSelectedItemIndex コールバックは選択された ID とインデックスをそれぞれ取得する際に使用します。

ドロップダウン リストに動的に入力する

実行時までリボン コントロールにどのアイテムを表示するかがわからない場合があります。コールバックを使用すると、現在の状況に基づいて値を指定することができます。たとえば、ドキュメントの見出し一覧を表示する必要がある場合があります。次の例では、現在のドキュメントの見出しの一覧を指定しています。

次のコントロールをリボンのユーザー設定に挿入します。

<dropDown id="HeadingsDropDown" 
  getItemCount="GetItemCount" 
  getItemID="GetItemID" 
  getItemLabel="GetItemLabel"/>

次に、コードで (この場合は、Word ドキュメントの Visual Basic Editor 内のモジュールで)、次のコールバック プロシージャを追加します。

Sub GetItemCount(control As IRibbonControl, ByRef count)
    Dim varItems As Variant
    varItems = ActiveDocument.GetCrossReferenceItems(wdRefTypeHeading)
    count = UBound(varItems)
End Sub

Sub GetItemLabel(control As IRibbonControl, index As Integer, _
    ByRef label)
    Dim varItems As Variant
    varItems = ActiveDocument.GetCrossReferenceItems(wdRefTypeHeading)
    label = varItems(index + 1)
End Sub

Sub GetItemID(control As IRibbonControl, index As Integer, ByRef ID)
    ID = "heading" & index
End Sub

これで、ドロップダウン リストを開いたときに、ドキュメント内の見出しが一覧表示されます。

個別のコントロールをグループ化する

既定では、グループに追加するコントロールの位置はリボンによって決められます。より細かくコントロールのレイアウトを定義する必要がある場合は、1 つまたは複数のボックスを使用してコントロールをグループ化します。ボックスを作成するときに、そのボックスの向き (縦方向または横方向) を指定します。グループには複数のボックスを含めることができます。また、ボックス間には縦の区切り線を挿入できます。(縦方向の区切り線は、セパレータ コントロールを使用して作成します。これは縦方向のボックスにのみ使用します。)

次の例では 3 つのグループを設定しています。1 つは横方向のボックス、1 つは縦方向のボックスを使用し、もう 1 つはボックスを使用していません。図 4 は、この例によって作成されたグループを示しています。

<group id="CustomGroup1" label="Horizontal Boxes" 
   insertBeforeMso="GroupClipboard">
  <box id="box1" boxStyle="horizontal">
    <button id="buttonA1" label="Button1"/>
    <button id="buttonA2" label="Button2"/>
  </box>
  <box id="box2" boxStyle="horizontal">
    <button id="buttonAA" label="ButtonA"/>
    <button id="buttonAB" label="ButtonB"/>
    <button id="buttonAC" label="ButtonC"/>
  </box>
</group>
<group id="CustomGroup2" label="Vertical Boxes" 
   insertBeforeMso="GroupClipboard">
  <box id="box3" boxStyle="vertical">
    <button id="buttonB1" label="Button1"/>
    <button id="buttonB2" label="Button2"/>
  </box>
  <separator id="separator2"/>
  <box id="box4" boxStyle="vertical">
    <button id="buttonBA" label="ButtonA"/>
    <button id="buttonBB" label="ButtonB"/>
    <button id="buttonBC" label="ButtonC"/>
  </box>
</group>
<group id="CustomGroup3" label="No Boxes" 
   insertBeforeMso="GroupClipboard">
  <button id="buttonC1" label="Button1"/>
  <button id="buttonC2" label="Button2"/>
  <button id="buttonCA" label="ButtonA"/>
  <button id="buttonCB" label="ButtonB"/>
  <button id="buttonCC" label="ButtonC"/>
</group>

図 4. さまざまなボックスのスタイル

さまざまなボックス スタイル

COM アドインを使用して Fluent UI を変更する

COM アドインを使用して Fluent UI を変更できます。リボンのユーザー設定に組み込む COM アドインを作成し、マネージ コードを使用する方法は 2 つあります。1 つは Visual Studio 2005 付属の [共有アドイン] テンプレートを使用して、標準の共有アドインを使用する方法、 もう 1 つは Visual Studio 2005 Tools for Office Second Edition を使用する方法です。この Visual Studio 2005 Tools for Office Second Edition をインストールしている場合は、標準の共有アドインよりも優れた機能をいくつか備えた COM アドインを作成できます。

特に、Visual Studio 2005 Tools for Office Second Edition を使用して作成したアドインには、個別のアプリケーション ドメインで実行されるというメリットがあります。また、プログラミング モデルが、共有アドイン テンプレートで使用されているものと比べてシンプルで、かつ保守しやすい点もメリットの 1 つです。詳細については、「共有アドインを Visual Studio Tools for Office のアドインに移行する」を参照してください。

プロジェクトで共有アドインを使用して Fluent UI を変更する

次の例では、マネージ COM アドインを使用して、カスタム UI を Word 2007 に追加しています。このアドインによって、カスタム タブ、グループ、およびボタンが作成されています。そして、ボタンをクリックすると、カーソルの位置に会社名が挿入されます。

アドイン ソリューションを作成するには

  1. Visual Studio 2005 を起動します。

  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  3. [新しいプロジェクト] ダイアログ ボックスの [プロジェクトの種類] ウィンドウで [その他のプロジェクトの種類] を展開し、[拡張機能] をクリックして、[共有アドイン] を選択します。

  4. [名前] ボックスに「InsertCompanyAddIn」と入力し、[OK] をクリックしてプロジェクトを作成します。

  5. 共有アドイン ウィザードの最初のページで、[次へ] をクリックします。

  6. [プログラミング言語の選択] ページで [Visual C#] または [Visual Basic] をクリックし、[次へ] をクリックします。

  7. [アプリケーション ホストの選択] ページで、[Microsoft Word] 以外の選択をすべて解除し、[次へ] をクリックします。

  8. [名前および説明の入力] ページで、名前として「InsertCompanyAddIn」を、説明として「Insert Company Name」を入力し、[次へ] をクリックします。

  9. [アドイン オプションを選択します] ページで [ホスト アプリケーションの読み込み時にアドインを読み込む] を選択し、[次へ] をクリックして、[完了] をクリックします。

Visual Studio に、アドイン自体とセットアップ プロジェクトの 2 つのプロジェクトが含まれる新しいソリューションが作成されます (セットアップ プロジェクトを使用すると、アドインを他のユーザーのコンピュータにインストールできます。これにより、デザイン時にアドインをインストールおよびアンインストールしやすくなります)。

Word 2007 およびリボン オブジェクト モデルで操作するには、2 つの種類のライブラリへの参照を追加します。

参照を追加するには

  1. ソリューション エクスプローラで、[参照先] フォルダを展開します。

    [参照] フォルダが表示されていない場合は、[プロジェクト] メニューの [すべてのファイルを表示] をクリックします。

  2. Microsoft.Office.Core 参照を削除します。

  3. [参照] フォルダを右クリックし、[参照の追加] をクリックします。

  4. [COM] タブをクリックし、[Microsoft Office 12.0 オブジェクト ライブラリ] を選択して、[OK] をクリックします。

  5. オープン コード ファイルの上部で、次のステートメントをプロジェクトに追加します。

    Imports Microsoft.Office.Core
    Imports Word = Microsoft.Office.Interop.Word
    
    using Microsoft.Office.Core;
    using Word = Microsoft.Office.Interop.Word;
    

XML カスタマイズ ファイルを作成するには

  1. [プロジェクト] メニューの [新しい項目の追加] をクリックします。

  2. [新しい項目の追加] ダイアログ ボックスで、[XML ファイル] を選択します。新しいファイルに Ribbon.xml という名前を付けて、[追加] をクリックします。

  3. 新しい XML ファイルで、次の XML マークアップを追加します。

    <customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui">
      <ribbon>
        <tabs>
          <tab id="CustomTab" label="My Tab">
            <group id="SampleGroup" label="Sample Group">
              <button id="Button" label="Insert Company Name" 
                size="large" onAction="InsertCompanyName" />
            </group>
          </tab>
        </tabs>
      </ribbon>
    </customUI>
    
  4. ファイルを保存して閉じます。

プロジェクトのリソース ファイル内で XML ファイルがリソースとして扱われている場合、この XML ファイルを使用するのが最も簡単です。

XML リソースを作成するには

  1. ソリューション エクスプローラで、[Ribbon.xml] を選択します。

  2. プロパティ ウィンドウで "ビルド アクション" プロパティを選択し、オプションの一覧から [埋め込まれたリソース] を選択します。

  3. [プロジェクト] メニューの [InsertCompanyAddIn プロパティ] をクリックします。

  4. [リソース] タブをクリックします。

  5. ソリューション エクスプローラ から Ribbon.xmlリソースのデザイン画面にドラッグします。

    これにより、XML コンテンツが含まれる新しいファイル ベースのリソースが作成されます。今後、Ribbon.xml ファイルはアプリケーション リソースとして自動的に格納され、そのコンテンツは Visual Basic または Visual C# 言語の機能を使用して取得できます。

  6. リソース ウィンドウを閉じます。プロンプトが表示されたら、[はい] をクリックしてリソースを保存します。

ホスト アプリケーションにアクセスして、リボンを操作するには

  1. ソリューション エクスプローラ で [Connect.cs] または [Connect.vb] を右クリックし、[コードの表示] をクリックします。

  2. applicationObject 変数の既存の宣言を見つけて、Word.Application オブジェクトを参照するように変更します。つまり、宣言を次のコードのように変更します。

    Private applicationObject As Word.Application
    
    private Word.Application applicationObject;
    
  3. OnConnection メソッドの最初の行を変更し、Word.Application オブジェクトのインスタンスが作成されるようにします。

    applicationObject = DirectCast(application, Word.Application)
    
    applicationObject =(Word.Application)application;
    
  4. (Visual Basic only) クラスの先頭の近くにある、Implements で始まるコード行を変更し、IRibbonExtensibility 名前空間の実装のサポートを追加します。Visual Basic により自動的に GetCustomUI プロシージャが挿入されます。

    Implements Extensibility.IDTExtensibility2, IRibbonExtensibility
    
  5. (C# only)public class Connect : ステートメントの最後にコンマを追加し、次のインターフェイス名を入力します。

    IRibbonExtensibility
    
  6. (C# only) 追加したインターフェイスを右クリックし、[インターフェイスの実装] をクリックします。次に、[インターフェイスを明示的に実装] をクリックします。これにより、スタブが IRibbonExtensibility インターフェイス メンバ GetCustomUI に対してのみ追加されます。

  7. GetCustomUI メソッドを、次のコードのように変更します。

    Public Function GetCustomUI(ByVal RibbonID As String) As String _
      Implements Microsoft.Office.Core.IRibbonExtensibility.GetCustomUI
      Return My.Resources.Ribbon
    End Function
    
    string IRibbonExtensibility.GetCustomUI(string RibbonID)
    {
      Return Properties.Resources.Ribbon;
    }
    

    注意事項

    GetCustomUI は、リボンのユーザー設定の XML 文字列を返すように実装する必要があり、初期化で使用してはいけません。特に、GetCustomUI 実装ではダイアログ ボックスやメッセージ ウィンドウを表示しないでください。初期化は、OnConnection メソッド (共有アドインの場合) または ThisAddIn_Startup メソッド (Visual Studio 2005 Tools for Office Second Edition で作成されたアドインの場合) で行うことをお勧めします。

  8. クラスに以下のメソッドを追加します。このメソッドにより、会社名がドキュメント内の現在のカーソルの位置に挿入されます。

    Public Sub InsertCompanyName(ByVal control As Office.IRibbonControl)
      ' Inserts the specified text at the current location
      ' in the document.
      Dim companyName As String = "Microsoft Corporation"
      applicationObject.Selection.InsertAfter(companyName)
    End Sub
    
    public void InsertCompanyName(Office.IRibbonControl control)
    {
      // Inserts the specified text at the current location 
      // in the document.
      string companyName = "Microsoft Corporation";
      applicationObject.Selection.InsertAfter(companyName);
    }
    
  9. [ファイル] メニューの [すべて保存] をクリックします。

  10. Word 2007 が実行されている場合は終了します。

  11. [ビルド] メニューの [ソリューションのビルド] をクリックします。

  12. ソリューション エクスプローラ で [InsertCompanyAddInSetup] を右クリックし、[ビルド] をクリックします。

  13. [InsertCompanyAddInSetup] を右クリックし、[インストール] をクリックします。

    InsertCompanyAddIn セットアップ ウィザードが表示されます。

  14. 各ページで [次へ] をクリックし、最後の画面で [閉じる] をクリックします。

  15. Word を起動します。

    [My Tab] タブが、他のタブの右側に表示されます。

  16. [My Tab] をクリックし、[会社名を挿入する] をクリックします。指定した会社名がドキュメント内のカーソルの位置に挿入されます。

  17. Word を終了します。

  18. Visual Studio の ソリューション エクスプローラ で [InsertCompanyAddInSetup] を右クリックし、[アンインストール] をクリックします。

Visual Studio 2005 Tools for Office Second Edition Project を使用して Fluent UI を変更する

ここでは、Visual Studio Tools 2005 Tools for Office Second Edition を使用して、前の例と同じアドインを作成する方法について紹介します。

プロジェクトを作成するには

  1. Visual Studio 2005 Tools for Office Second Edition を起動します。

  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

  3. [新しいプロジェクト] ダイアログ ボックスで、[Visual Basic] または [Visual C#] を選択します。

  4. [プロジェクトの種類] ウィンドウで [Office] ノードを展開し、[2007 アドイン] を選択します。

  5. [テンプレート] ウィンドウで [Word アドイン] を選択します。

  6. 新しいアドイン InsertCompanyAddIn1 に名前を付け、[OK] をクリックして新しいアドインを作成します。

Visual Studio に、アドイン自体とセットアップ プロジェクトの 2 つのプロジェクトが含まれる新しいソリューションが作成されます。(セットアップ プロジェクトを使用すると、アドインを他のユーザーのコンピュータにインストールできます。これにより、デザイン時にアドインをインストールおよびアンインストールしやすくなります。)

新しいアドインには IExtensibility2 インターフェイスが実装されていますが、このインターフェイスに必要なすべてのプロシージャが表示されているわけではありません。Visual Studio 2005 Tools for Office Second Edition では、ThisAddIn という名前のシンプルなクラスが作成され、必要になりそうなプロシージャが提供されます。また、コードを ThisAddIn_Startup メソッドまたは ThisAddin_Shutdown メソッドに追加できます。この例では、いずれのメソッドにもコードは必要ありません。また、アドインを作成するために、コードを変更したり参照を設定したりする必要もありません。つまり、すべての接続動作が行われています。

リボンの拡張アイテムを追加するには

  1. [プロジェクト] メニューの [新しい項目の追加] をクリックします。

  2. [新しい項目の追加] ダイアログ ボックスで、[リボン サポート] を選択します。

  3. [追加] をクリックし、既定の名前 (Ribbon1.vb または Ribbon1.cs) をそのまま使用します。

    Ribbon1.xml という名前の XML ファイルと新しいクラスがプロジェクトに追加されます。XML ファイルには、非常にシンプルなカスタマイズ UI が含まれます。新しい Ribbon1 ファイルには、ThisAddIn クラスをコメントアウトするための拡張と、Ribbon1 という名前の新しいクラスが含まれています。

  4. ソリューション エクスプローラ で [Ribbon1.xml] をダブルクリックし、XML エディタで開きます。

  5. 既存の XML を次のように変更します。

    <customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui" 
              onLoad="onLoad">
      <ribbon>
        <tabs>
          <tab id="CustomTab" label="My Tools Tab">
            <group id="SampleGroup" label="Sample Group">
              <button id="Button" label="Insert Company Name" 
                size="large" onAction="InsertCompanyName" />
            </group>
          </tab>
        </tabs>
      </ribbon>
    </customUI>
    
  6. XML ファイルを保存して、XML エディタを終了します。

プロジェクトのリソース ファイル内で XML ファイルがリソースとして扱われている場合、この XML ファイルを使用するのが最も簡単です。

XML リソースを作成するには

  1. [プロジェクト] メニューの [InsertCompanyAddIn1 プロパティ] をクリックします。

  2. [リソース] タブをクリックします。

  3. ソリューション エクスプローラ から Ribbon1.xmlリソースのデザイン画面にドラッグします。

    これにより、XML コンテンツが含まれる新しいファイル ベースのリソースが作成されます。今後、Ribbon1.xml ファイルはアプリケーション リソースとして自動的に格納され、そのコンテンツは Visual Basic または Visual C# 言語の機能を使用して取得できます。

  4. リソース ウィンドウを閉じます。プロンプトが表示されたら、[はい] をクリックしてリソースを保存します。

リボン コードを変更し、アドインを完了するには

  1. ソリューション エクスプローラ で [Ribbon1.vb] または [Ribbon1.cs] を右クリックし、[コードの表示] をクリックします。

  2. コード エディタで、ThisAddIn という名前の部分クラスを選択し、部分クラスのコメントを解除します。

    RequestService プロシージャを使用すると、Visual Studio 2005 Tools for Office Second Edition ランタイムで、アドインのリボンのユーザー設定に対するコールバックを処理するクラスを決めることができます。このプロシージャが IRibbonExtensibility インターフェイスに対応する GUID を受け取ると、その IRibbonUI インスタンスを返します (存在する場合)。存在しない場合は、コントロールを基本クラスの RequestService メソッドに渡します。

    注意

    既定では、RequestService メソッドはコメントに表示されます。このメソッドのオーバーライドが既にアドインに含まれている可能性があるからです (FormRegionStartup インターフェイス、または新しい他の拡張インターフェイスの 1 つについて)。この場合は、if ブロックを、コメントされたコードからこのメソッドの既存のオーバーライドにコピーできます。

  3. GetResourceText を呼び出さずに Ribbon1 リソースから XML を返すように、Ribbon1 クラスで GetCustomUI プロシージャを変更します。

    Return My.Resources.Ribbon1
    
    return Properties.Resources.Ribbon1;
    

    注意

    アドイン テンプレートには、Helpers 非表示領域内に XML ファイルのコンテンツを取得する GetResourceText という名前のプロシージャが含まれています。必要なジョブは、このプロシージャによって行われますが、リソースの名前を文字列として指定しなければなりません。この方法は少し不安定なところがあります (リソース名を変更すると、コードをコンパイルすることは可能ですが、実行時にアドインが失敗します)。したがって、この手順で示すように、XML コンテンツをリソース ファイルに追加し、リソース取得に対する言語固有のサポートを使用することをお勧めします。この GetResourceText プロシージャによって、テンプレートは "すぐに" 動作できます。つまり、アドインを作成およびビルドすると、何の変更も加えずにリボンのユーザー設定が動作します。

  4. Ribbon1 クラスで、Word の Application オブジェクトを参照できる変数のパブリック宣言を追加します。

    Public Application As Word.Application
    
    public Word.Application Application;
    
  5. 同じファイル内の ThisAddIn 部分クラスで、Ribbon1 クラスのインスタンスを作成するコード行のすぐ下に、Ribbon1 クラスの Application プロパティを設定するコードを追加します。

    ' In the RequestService method:
    ribbon.Application = Application
    
    // In the RequestService method:
    ribbon.Application = Application;
    
  6. 次のプロシージャを Ribbon1 クラスに追加します。これにより、リボン内の新しいボタンの onAction コールバックを処理し、ドキュメント内のカーソル位置に会社名を挿入できます。

    Public Sub InsertCompanyName(ByVal control As IRibbonControl)
      ' Inserts the specified text at the current location
      ' in the document.
      Dim companyName As String = "Microsoft Corporation"
      Application.Selection.InsertAfter(companyName)
    End Sub
    
    public void InsertCompanyName(IRibbonControl control)
    {
      // Inserts the specified text at the current location 
      // in the document.
      string companyName = "Microsoft Corporation";
      Application.Selection.InsertAfter(companyName);
    }
    

アドインをテストするには

  1. [ファイル] メニューの [すべて保存] をクリックします。

  2. F5 キーを押してプロジェクトを実行します。この操作により、Word 2007 も一緒に起動します。

  3. [My Tools Tab] タブをクリックし、[大きいボタン] をクリックします。

    会社名がドキュメント内のカーソルの位置に挿入されます。

  4. Word 2007 を終了します。

前の例で示したように、セットアップ プロジェクトをビルドし、アドインをインストールできます。ここでは、Visual Studio 2005 Tools for Office Second Edition によって、アドインを実行 (およびデバッグ) しやすくなっています。F5 キーを押すと、プロジェクトは予想どおりに実行されます。共有アドイン テンプレートで同じように動作させることも可能です。それには、F5 を押したときにどのアプリケーションを実行するかを示すプロジェクト プロパティを設定し、適切な Office アプリケーションを選択します。アドインをデバッグし、ブレークポイントをコードに追加しておくと役に立つでしょう。

既存のコマンド バー アドインで作業する

COM アドインを作成する場合、通常は、ユーザーがアドインを操作できなければなりません。以前のバージョンの Office では、コマンド バー オブジェクト モデルを使用してメニュー項目またはツール バー ボタンを追加することで、これを実現していました。Office の 2007 リリースでも、カスタム アプリケーションは Fluent UI で引き続き動作します。また、ほとんどの場合、変更が不要です。ただし、コマンド バー オブジェクト モデルまたはメニューやツール バーを変更する他のテクノロジ (WordBasic や XLM など) を使用して行った変更は、個別の [アドイン] タブに表示されます。これは、ユーザーが前に使用したアドインを操作するのに必要なコントロールを特定する際に役立ちます。

図 5. Excel 2007 の [アドイン] タブに追加されたカスタム ツール バー ボタン

Excel 2007 の [アドイン] タブ

Fluent UI のアイテムの変更には、既に説明した方法およびコードを使用できます。メニュー構造を変更する既存のアドインについては、コマンドが [アドイン] タブに表示されます。既存のアドインの更新方法の詳細については、技術記事「共有アドインを Visual Studio Tools for Office のアドインに移行する」を参照してください。

動的に Fluent UI を更新する

コントロールのプロパティを返すコールバック (ギャラリー コントロールの getItemCount コールバックなど) は、コントロールの再初期化が明示的に指定された場合を除き、通常は、Fluent UI が初期化されたときにのみ呼び出されます。これは、リボンへの参照をコードに格納し、個別のコントロールまたはリボン全体を無効にするリボンのメソッドを呼び出すことで、強制的に行うことができます。それには、<customUI> 要素でコールバック プロシージャを指定して、onLoad 属性を追加する必要があります。onLoad コールバックは、RibbonX マークアップ ファイルが正常に読み込まれたときに一度しか呼び出されません。コールバック プロシージャは、IRibbonUI オブジェクトをパラメータとして受け取ります。コードは後で使用できるようにこの参照をキャッシュできます。IRibbonUI クラスには、リボン全体の 1 つのコントロールを無効にできるメソッドが用意されています。

実行時にコントロールを更新できるよう IRibbonUI オブジェクトをキャッシュするには、次のようなコードを追加します。

<customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui" 
  onLoad="ribbonLoaded">

コード内 (ドキュメント内の VBA コード、またはアドイン内の Visual Basic コードまたは C# コード) では、次のようにプロシージャを追加します。

IRibbonUI myRibbon;

public void ribbonLoaded(IRibbonUI ribbon) 
{
  myRibbon = ribbon;
}

IRibbonUI インターフェイスが、次のメソッドを公開します。

表 4. IRibbonUI のメソッドのインターフェイス

メソッド

動作

説明

Invalidate()

コールバック

すべてのカスタム コントロールが再初期化されるようにします。

InvalidateControl(string controlID)

コールバック

特定のコントロールが再初期化されるようにします。

イメージを読み込む

<customUI> 要素の loadImage 属性を使用すると、すべてのイメージを読み込むことができるコールバックを指定できます。このコールバック プロシージャを設定したら、Office がそのコールバック プロシージャを呼び出し、イメージを読み込む各コントロールのイメージ属性の文字列を渡します。getImage コールバックを複数回、たとえば、イメージを必要とするコントロールごとに実装する必要はありません。たとえば、カスタマイズには次のようなマークアップが含まれる場合があります。

<customUI xmlns="https://schemas.microsoft.com/office/2006/01/customui" 
  loadImage="GetImage">
<!-- Later in the markup -->
   <button id="myButton" image="mypic.jpg" />

ボタンのイメージを提供するために、GetImage 関数が呼び出されます。これは、パラメータ mypic.jpg を渡し、それと引き換えに IPictureDisp オブジェクトを要求します。この方法を使用すると、カスタマイズに必要なすべてのイメージを返すコールバック プロシージャを記述できます。各コントロールの getImage コールバックを個別に記述する必要はありません。リボンの Invalidate メソッドまたは InvalidateControl メソッドを呼び出すときに、loadImage コールバックが再度呼び出されることはありません。実行時にイメージを動的に変更する必要があるコントロールについては、getImage コールバックを使用します。

たとえば、カスタマイズのイメージを提供するには次のコードを使用できます。getImage コールバックは stdole.IPictureDisp タイプを返さなければなりません。したがって、通常は、イメージをこのタイプに変換する必要があります。この変換を実行するには、次の PictureConverter クラスを使用します。このクラスは、AxHost クラスから継承されています。

Friend Class PictureConverter
  Inherits AxHost

  Private Sub New()
    MyBase.New(String.Empty)
  End Sub

  Public Shared Function ImageToPictureDisp( _
    ByVal image As Image) As stdole.IPictureDisp
    Return CType(GetIPictureDispFromPicture(image), _
      stdole.IPictureDisp)
  End Function

  Public Shared Function IconToPictureDisp( _
    ByVal icon As Icon) As stdole.IPictureDisp
    Return ImageToPictureDisp(icon.ToBitmap())
  End Function

  Public Shared Function PictureDispToImage( _
    ByVal picture As stdole.IPictureDisp) As Image
    Return GetPictureFromIPicture(picture)
  End Function
End Class
internal class PictureConverter : AxHost
{
  private PictureConverter() : base(String.Empty) { }

  static public stdole.IPictureDisp ImageToPictureDisp(Image image)
  {
    return (stdole.IPictureDisp)GetIPictureDispFromPicture(image);
  }

  static public stdole.IPictureDisp IconToPictureDisp(Icon icon)
  {
    return ImageToPictureDisp(icon.ToBitmap());
  }

  static public Image PictureDispToImage(stdole.IPictureDisp picture)
  {
    return GetPictureFromIPicture(picture);
  }
}

すると、コールバック プロシージャは次のようになる場合があります。これは、MyIcon というプロジェクト リソースにアイコンを追加したものとしています。

Public Function GetImage( _
  ByVal imageName As String) As stdole.IPictureDisp
  Return PictureConverter.IconToPictureDisp(My.Resources.MyIcon)
End Function
public stdole.IPictureDisp GetImage(string imageName)
{
  return
    PictureConverter.IconToPictureDisp(Properties.Resources.MyIcon);
}

注意

このコードを実行するには、stdole アセンブリへの参照セットがプロジェクトに必要です。この参照は、Visual Studio 2005 Tools for Office Second Edition を使用して作成されたプロジェクトに自動的に含められます。

まとめ

以前のバージョンの Office では、UI をカスタマイズすることは、アドインを共有するアプリケーションごとに COM アドインまたは DLL ファイルを作成することを意味していました。対照的に、リボン機能では、リボンの作成およびカスタマイズを簡素化するテキスト ベースの宣言 XML マークアップを使用します。XML 数行によって、ユーザーに適したインターフェイスを作成できます。また、1 つのファイルに XML マークアップが含まれているため、ニーズの変更に応じたインターフェイス変更が格段に容易になっています。わかりやすい場所にコマンドを配置することで、ユーザーの生産性も向上します。さらに、リボンによってアプリケーション間での一貫性が実現し、各アプリケーションの学習に必要な時間が削減されます。

追加情報

この記事に記載されている製品およびテクノロジの詳細については、以下の追加情報を参照してください。