エクスポート (0) 印刷
すべて展開

Access 2007 でのリボンの拡張

  

Viki Selca (Microsoft Corporation)
Clint Covington (Microsoft Corporation)

2006 年 12 月
日本語版最終更新日 2007 年 2 月 15 日

適用対象:
   Microsoft Office Access 2007

要約: リボン拡張用の XML マークアップとマクロのみを使用して、Access 2007 データベースのカスタム リボンを作成する方法を学習します。また、コードを記述することなくコマンド用スペースを作成する方法と、コードを使用する高度な方法についても説明します。

Marketing Projects.exe (英語) をダウンロードしてください。

目次

Access 2007 の新しいユーザー インターフェイスの概要
Access でのリボンのカスタマイズ
シナリオ: Marketing Projects データベース
高度なシナリオ: コードの記述
まとめ
追加情報
付録

Access 2007 の新しいユーザー インターフェイスの概要

Microsoft Office Access 2007 の開発者向け機能の中で最も優れた機能の 1 つとして、アプリケーションでリボンをカスタマイズできるという点が挙げられます。リボンは、コマンドを表示するための新たなユーザー モデルです。これにより、ユーザーはアプリケーションでコマンドをより見つけやすく、操作しやすくなります。

リボン UI を変更するには、XML を作成します。カスタマイズ用のファイルは、任意のテキスト エディタを使用して作成できます。リボンが組み込まれるアプリケーションでは、すべて同一の拡張モデルが使用されるため、わずかな変更で同じリボン拡張用の XML を再利用できます。たとえば、Access 2007 用に作成したカスタム XML を、Microsoft Office Excel 2007、Microsoft Office Word 2007、Microsoft Office PowerPoint 2007、Microsoft Office Outlook 2007 で再利用できます。

リボン拡張機能 (RibbonX) のアーキテクチャおよび XML マークアップ仕様の詳細については、<開発者向け> Office (2007) リボン ユーザー インターフェイスのカスタマイズ (1/3) (英語) を参照してください。

この記事で後に説明する Marketing Projects データベースの完成版は、ダウンロード ファイル Marketing Projects.exe (英語) に含まれています。

作業に役立つツール

次のツールおよびリファレンスは、この記事の手順を実行する際に役立ちます。

  • XML エディタ

    RibbonX 開発の計画が多数ある場合、Microsoft IntelliSense 対応の XML エディタを使用すると便利です。Microsoft Visual Basic 2005 Express Edition、Microsoft Visual Web Developer 2005 Express Edition などでは、このツールが無料で提供されています。詳細については、Microsoft Express Editions (英語) を参照してください。

  • customUI スキーマ

    リボンのカスタマイズを検証するためのスキーマです。2007 Office system: XML スキーマ リファレンス (英語) からダウンロードしてください。

  • 2007 Office system コントロール ID 一覧

    組み込みコントロールの ID の一覧です。この ID を使用すると、Office の組み込みタブとグループに、ユーザー定義のタブとグループを配置したり、ソリューションに組み込みタブ、グループ、コントロールを表示することができます。RibbonX は、XML 要素ごとに、要素の外観および動作を指定するための属性セットを渡します。RibbonX はその他に、組み込みコントロールでの作業を可能にするための特別な属性のセット (idMsoinsertBeforeMsoinsertAfterMso、および imageMso) も渡します。RibbonX で使用可能な属性の簡単な説明については、表 13. で確認できます。

    詳細については、2007 Office system ドキュメント: コントロール ID 一覧 (英語) をダウンロードしてください。

  • 2007 Office system アイコン ギャラリー

    組み込みコントロール用のイメージ名および ID の一覧です。この ID を使用すると、Office プログラムの組み込みリボンに含まれるイメージを再利用できます (関連する属性: imageMso)。

    詳細については、2007 Office system アドイン: アイコン ギャラリー (英語) をダウンロードしてください。

Access でのリボンのカスタマイズ

Access 2007 でのリボンのカスタマイズに関するオプションは、他の Office アプリケーションと共通する部分と、大きく異なる部分とがあります。他の 2007 Microsoft Office system のアプリケーションと同じく、Access リボン UI も XML マークアップを使用してカスタマイズします。また、XML マークアップを含む外部ファイルや COM アドインを使用して、アプリケーションにリボンのカスタマイズを実装することができます。一方、他の Office アプリケーションと異なる点ですが、Access データベース ファイルはバイナリ形式であるため、新しい形式の Office オープン XML 形式のファイルとして開くことができず、データベース ファイルにパーツを追加して Access リボンをカスタマイズすることができません。

Access でのリボン UI のカスタマイズには高い柔軟性があります。たとえば、カスタマイズ用マークアップは、テーブルへの格納、VBA (Visual Basic for Application) プロシージャへの埋め込み、別の Access データベースへの格納が可能なほか、Excel ワークシートからリンクすることができます。アプリケーション全体、または特定のフォームやレポートに対して、カスタム UI を指定することもできます。

データベース アプリケーションのリボンのカスタマイズでは、次の 4 つの手順を実行します。

  1. 任意のテキスト エディタまたは XML エディタで XML マークアップを作成します。
  2. データベースに XML を読み込みます。
  3. カスタマイズ内容が反映されるように、データベース、フォーム、およびレポートのプロパティを設定します。
  4. マクロまたは VBA を使用して、簡単なアクション (ボタンのクリックなど) を処理します。

複雑な用途については、次のシナリオに基づいてコードを記述します。

  • リモートの場所から XML を読み込む。
  • リボンの内容を動的に変更する。
  • ファイル システム、またはデータベースの "添付ファイル" フィールドから、カスタム イメージを読み込む。

XML をデータベースに読み込む。

Access では、リボン XML の保存場所を柔軟に選択できるようになっています。次の 2 つの場所から選択が可能です。

  • ローカル テーブルに XML を保存します。コードを記述しなくて済む簡単な方法です。XML はすべてデータベースに格納され、起動時に自動的に読み込まれます。
  • リモートのリソース ファイル、データベース、またはアドインに XML を保存します。XML を読み込むためのコードを記述する必要がありますが、XML の保存先は自由に選択できます。この方法では、たとえば、すべてのアプリケーションで共有可能なカスタム XML を格納するアドインを作成することができます。これは、現在のユーザーをベースにして、異なる XML を読み込む際に非常に重要なポイントとなります。具体的には、現在のユーザーがデータベース管理者ロールの構成メンバである場合に、データベース管理者機能を示すリボンを読み込むことなどができます。

Access は、アプリケーションの起動時に RibbonX マークアップを読み込みます。起動時に読み込んだカスタマイズ内容は、アプリケーションが実行されている間有効です。起動後に新しいマークアップを読み込むことはできませんが、適用するカスタマイズ内容をアプリケーションの実行中に変更することは可能です。

ローカル テーブルからの XML の読み込み

Access は、ユーザー システム テーブル USysRibbons 内で RibbonX マークアップを検索します。このテーブルを作成して、適切な数のレコードを格納します。USysRibbons テーブルの各レコードには、リボンに適用可能な整形式の有効な RibbonX マークアップがチャンクとして含まれます。カスタマイズ内容を正しく読み込むには、表 1. に示す 2 つのフィールドを含めておく必要があります。その他のフィールドは無視されます。

表 1. リボンのカスタマイズに必要なフィールド

フィールド名 データ型 説明
RibbonNameテキストRibbonXML フィールドの RibbonX のカスタマイズ内容を識別する一意の名前
RibbonXMLメモリボンに適用される一連のカスタマイズ内容を記述する RibbonX の XML
メモ:   既定では、システム テーブルはナビゲーション ウィンドウに表示されません。

ナビゲーション ウィンドウにシステム オブジェクトを表示する

  1. Microsoft Office ボタンをクリックし、[Access のオプション] をクリックします。
  2. [カレント データベース] をクリックし、[ナビゲーション] に移動します。
  3. [ナビゲーション オプション] をクリックします。
  4. [システム オブジェクトの表示] オプションを選択します。
    メモ:   このオプションは、Access Data Project (ADP) には使用できません。ADP には、次に説明する LoadCustomUI メソッドを使用する必要があります。
リモート ソースからの読み込み

リボン専用の Access VBA オブジェクト メンバである Application.LoadCustomUI メソッドを呼び出すと、アプリケーションに RibbonX マークアップを読み込むことができます。このメソッドのシグニチャは、次のとおりです。

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

ここで、

  • expression は、Application オブジェクトを返します。
  • CustomUIName は、リボン UI の名前を表します。
  • CustomUIXML には、カスタマイズ用 XML マークアップが含まれます。

通常、リボンを作成してアプリケーションで使用可能にするためには、まず、LoadCustomUI メソッドを呼び出すプロシージャを含むモジュールをデータベース内に作成し、これにより、リボンの名前とカスタマイズ用 XML マークアップを渡します。XML マークアップには前述のとおり、テーブルから作成される Recordset オブジェクト、データベース外部のソース (文字列に解析する必要のある XML ファイルなど)、またはプロシージャに直接埋め込まれた XML マークアップを使用できます。LoadCustomUI メソッドを複数回呼び出し、それぞれ異なる XML マークアップを渡すことによって、さまざまなリボンが使用できるようになります。ただしこの場合、各リボン UI の RibbonName、およびリボンを構成するタブの id 属性が一意であることが必要です。

プロシージャが完成したら、次に、RunCode アクションを使用してプロシージャを呼び出す AutoExec マクロを作成します。これにより、アプリケーションの開始時に LoadCustomUI メソッドが自動的に実行され、すべてのカスタム リボンがアプリケーションで有効になります。

この関数の実装方法と、別の場所からカスタマイズ内容を読み込む方法については、この記事の「高度なシナリオ: コードの記述」で説明します。

カスタマイズの無効化

カスタム リボンではなく、Access のリボンを表示するには、Shift キーを押しながらデータベースを開きます。

エラー

[Access のオプション] ダイアログ ボックスのオプションを選択すると、リボンの詳細なエラー レポートを表示することができます。このプロパティは、リボンが含まれるすべての 2007 Microsoft Office system プログラムに適用されます。

ユーザー インターフェイスでリボンに関するエラー メッセージを表示する

  1. Microsoft Office ボタンをクリックし、[Access のオプション] をクリックします。
  2. [詳細設定] をクリックし、[全般] に移動します。
  3. [アドイン ユーザー インターフェイスに関するエラーを表示する] チェック ボックスをオンにし、次に [OK] をクリックします。

カスタマイズ内容を反映させるためのデータベース、フォーム、およびレポートのプロパティの設定

これまでに、データベースに XML を読み込む方法と、エラーを表示する方法について説明しました。ここでは、リボンにカスタマイズ内容を表示する方法について説明します。リボンは、次のような対象に割り当てることができます。

  • データベース: カスタマイズの適用は、データベースの "リボン名" プロパティで制御します。
  • フォームまたはレポート: カスタマイズの適用は、フォームまたはレポート オブジェクトの "リボン名" プロパティで制御します。

"リボン名" プロパティはドロップダウン リストになっており、USysRibbons テーブルまたは Application.LoadCustomUI メソッドの呼び出しによって、データベースの起動時に指定した RibbonName フィールドの値に一致する内容が表示されます。

データベース レベルのカスタマイズ

データベース レベルのカスタマイズは、データベースの開始時に適用されます。これは、XML が読み込まれ、その他のスタートアップ コードが完了した時点で実行されます。データベースのカスタマイズ内容は、データベースを終了するまで有効です。つまり、アプリケーションを再起動しない限り、データベースに別のカスタマイズ内容を割り当てることはできません。ただし、フォーム用やレポート用に読み込んだカスタマイズ内容を使用して、データベース用に読み込んだリボンに変更を加えることは可能です。どの対象にどのカスタマイズ内容を適用するかについては、慎重に検討する必要があります。この点については、記事内の「シナリオ: Marketing Projects データベース」で詳細に説明します。

アプリケーション開始時に RibbonX のカスタマイズ内容を適用する

  1. 前述したいずれかの方法で、データベースに RibbonX マークアップを読み込みます。
  2. アプリケーションを終了し、再起動します。
  3. Microsoft Office ボタンをクリックし、[Access のオプション] をクリックします。
  4. 左の作業ウィンドウで [カレント データベース] をクリックし、[リボンとツール バーのオプション] セクションの [リボン名] ボックスから、リボンを 1 つ選択します。
  5. ここで、アプリケーションを終了して再起動します。選択したリボン UI が表示されます。
フォームやレポートのカスタマイズ

フォームやレポートのカスタマイズ内容は、オブジェクトが読み込まれるかアクティブになると表示され、オブジェクトが閉じられたり他のオブジェクトに切り替えられるとロール バックされます。フォームやレポートに対しては、任意のカスタマイズ内容を適用することができます。

この場合、重要な注意点が 2 つあります。

  • フォームやレポートに適用するカスタマイズ内容は、リボンに既に表示されているものに追加される形で表示されます。言い換えると、明示的にタブを非表示にする、つまり、startFromScratch 属性を True に設定しない限り、フォームやレポートのリボンによって表示されるタブは、既存のタブに追加される形で表示されます。
  • データベースに適用するカスタマイズ内容は開始時に適用されるため、フォームやレポートのカスタマイズに優先されます。たとえば、データベースのリボンの startFromScratch 属性を True に設定している場合、この設定をフォームやレポートのリボンで無効にすることはできません。

フォームやレポートにカスタム リボンを割り当てる

  1. レイアウト ビューで、フォームまたはレポートを開きます。デザイン ビューでも開くことができます。
  2. プロパティ シートが表示されていない場合は、F4 キーを押して表示します。
  3. プロパティ シートの [その他] タブで、[リボン名] ボックスからリボンを 1 つ選択します。
  4. フォームまたはレポートを保存、終了してから、再び表示します。選択したリボン UI が表示されます。

Access には、AccessFormReportExtensibility という非表示で空のコンテキスト タブセットが用意されており、これを使用してフォームやレポートに応じたリボン内容を表示することができます。フォームやレポートのカスタマイズでタブを追加する場合は、このタブセットを使用します。この方法には、以下のようなメリットがあります。

  • フォームやレポートに別のタブを追加することにより、従来フォームに表示されていたコマンドをリボンに移動することができます。つまり、アイコンおよびアイコン大のイメージを使用して、フォームで最も重要なコマンドをユーザーに示すことができます。
  • 通常のリボン タブは背景に表示されますが、コンテキスト タブセットでは、フォームやレポートが最初に開かれた時点でタブが前面に表示されます。このため、コンテキスト タブセットにカスタム タブを配置すると、カスタマイズ内容に注目させることができます。

この機能については、記事内の「シナリオ: Marketing Projects データベース」で詳しく説明します。

簡単なマクロ アクションの作成

Access では、データベースでコードが使用できない状況 (セーフ モード) において実行できる安全なマクロを多数サポートしています。マクロの使用は、アプリケーションの軽量化にもつながります。ボタンのクリックのような単純なアクションに対して VBA プロジェクトを追加する必要がなくなるためです。コードを使用しないデータベースで、さまざまなシナリオを実装することができます。

onAction コールバックはアクションを実行しますが、リボンに値を返す必要がないため、このコールバックはマクロで処理するのが理想的です。

XML の例

次の XML の例は、コントロール用の onAction 属性の定義方法を示すものです。リボンで、MacroObjectName マクロ オブジェクトの MacroName マクロが呼び出されます。

onAction="MacroObjectName.MacroName"

onAction コールバックを処理するマクロについては、記事内の「シナリオ: Marketing Projects データベース」で作成を行います。

VBA コールバックの作成

リボンのコントロールには、XML マークアップで設定可能な標準の属性が含まれます。この記事の「付録」の表 13. には、RibbonX で定義される属性の一覧が示されています。ほとんどの属性が、XML の記述の際に一度設定されます。これらの属性値は静的であり、リボンに読み込まれた後は変更できません。"コールバック" 型の属性は、XML がリボンに読み込まれた直後に動的に設定できます。この型の属性には、静的な文字列ではなく、リボンで呼び出す VBA 関数名を指定する必要があります。マクロを使用すると、onAction のような簡単なコールバックを処理することができます。ただし、リボンに値またはオブジェクトを返す必要のあるコールバックを処理する場合は、VBA 関数を記述する必要があります。Access では、カスタム イメージの読み込みにも、VBA コールバックを指定する必要があります。この詳細については、記事内の「高度なシナリオ: コード記述」で説明されています。

VBA コールバックを使用すると、アドイン内にコードを含めることができます。ただし、コードを実行するには、データベース内でコードが使用可能になっている必要があります。

イメージの読み込み

Access データベース ファイルはバイナリ形式であり、2007 リリースの Office Open XML Format ファイルとして開くことができないため、他の 2007 Office system アプリケーションとは異なる手順で、カスタム イメージの保存およびリボンへの読み込みを行う必要があります。Access へのリボン用イメージの読み込みについては、次の方法があります。

  • Office アイコンの活用: imageMso 属性を使用して、Office で使用可能なアイコンを再利用します。このオプションは、リボンを実装するすべての Office アプリケーションで有効です。Office アプリケーションに表示されるアイコンであればどれでも使用できます。
  • getImage コールバックの使用: getImage 属性を使用して、イメージを提供する関数を指定します。このメソッドは、他の Office アプリケーションでも使用できます。Access には、Access データベースの "添付ファイル" フィールドからイメージを読み込むオプションがあります。
Office アイコンの活用

これは、Access リボンにコード記述なしでイメージを挿入できる手段です。Office アプリケーションのリボンに表示されるイメージにはそれぞれ、カスタム リボンで参照および表示を行うための一意の ID があります。imageMso 属性を使用して、使用する組み込みイメージの名前を指定することができます。

XML の例

次の例は、imageMso 属性を使用して、組み込みイメージを参照する方法を示します。

<button id="cmdCasesByCategory" label="Cases By Category" imageMso="ViewsReportView" onAction="Ribbon.CasesByCategory" />
ファイル システムからの読み込み

Office OLE ライブラリを使用して、ファイル システムからイメージを読み込むことができます。リボンは、IPictureDisp オブジェクトからイメージを読み込みます。LoadPicture メソッドで BMP 形式または PNG 形式のイメージ ファイルを読み込み、このオブジェクトに保存することができます。

XML の例

次の例は、getImage 属性を使用してボタン コントロールを宣言します。リボンは onGetImage 関数を呼び出して、ボタン用のイメージを取得します。

<button id="myButton" getImage="onGetImage">

VBA の例

次の例は、前の例でリボンが XML を評価する際に呼び出される VBA 関数を示しています。

Function onGetImage(control As IRibbonControl, ByRef image)          
    Select Case control.ID
    Case "myControl":
        Set image = LoadPicture("c:\images\MyImage.bmp")
    End Select
End Function

"添付ファイル" フィールドからの読み込み

Access には、"添付ファイル" フィールドというイメージ保存に適した領域が新たに用意されています。カスタム イメージを使用する場合、イメージは "添付ファイル" フィールドに格納するとよいでしょう。その理由は次のとおりです。

  • イメージがデータベースに格納され、アプリケーションとの連動性が高い。
  • 添付ファイルのコントロールには、データベースにイメージを読み込むための簡単なメソッドが用意されている。

このメソッドを使用する場合は、次のようなオブジェクトが必要です。

  • イメージ格納用のテーブル
  • イメージの読み込み、編集、表示のためのフォーム
  • リボンにイメージを返すための関数
イメージ格納用のテーブルの作成

リボン イメージは任意のテーブルに格納することができます。XML ストレージと同じ規則を使用して、テーブルに "USysRibbonImages" という名前を付けます。

メモ:   既定では、システム テーブルはナビゲーション ウィンドウに表示されません。システム オブジェクトを表示するには、前述の手順を実行します。

表 2. イメージ用のデータベース テーブルの作成

フィールド名 データ型 説明
Images添付ファイルアプリケーションで使用する BMP、PNG、または JPG のいずれかの形式のイメージが含まれます。このイメージ セットを取得し、名前を元に適切なコントロールを検索します。

次の例では、すべてのイメージをテーブル内の単一のレコードに格納します。この方法を使用する場合、後でフィールドを検索してイメージを取得することができるように、イメージにわかりやすい名前を付けておきます。この方法でイメージを格納するメリットは、コードを大幅に簡略化できることです。一方、デメリットは、何百ものカスタム イメージを使用するソリューション向けには拡張できないことです。

表 3. 単一レコードへのイメージの格納

フィールド名 データ型 説明

ControlId

テキスト

Images フィールドのイメージを使用するリボン コントロール用の識別子です。このフィールドを使用して、Images フィールドに含まれるイメージを取得します。

Images

添付ファイル

ControlId によってコントロールに関連付けられるBMP、PNG、または JPG のいずれかの形式のイメージが 1 つまたは複数含まれます。

Description

テキスト

このイメージおよび使用されるコンテキストに関する説明です。必要に応じて指定します。

上記のほか、スキーマを拡張し、イメージ名、一意の ID など、ソリューション検索に必要な情報を得るための追加フィールドを含める方法もあります。この方法では、アプリケーションの一意のイメージごとに、レコードが 1 つ作成されます。1 つのイメージに対して、縮小形式、拡大形式、背景透過形式、ローカライズ形式など、複数の異なるバージョンがある場合は、そのレコードの添付ファイル フィールドでグループ化を行うことができます。この方法のメリットは、多数のイメージを必要とするソリューションや、コンテキストに応じてコントロールのイメージを差し替えるようなソリューションに対応できることです。一方、デメリットは、検索が複雑化し、イメージ取得用のコードにロジックを追加する必要があることです。

イメージを操作するためのフォームの作成

イメージを操作するには、テーブル USysRibbonImages (または独自のテーブル名) に基づいて基本フォームを作成する必要があります。

フォームを作成する

  1. ナビゲーション ウィンドウで、USysRibbonImages テーブルをクリックします。
  2. データベース ウィンドウの [作成] タブで、[フォーム] をクリックします。
  3. フォームに "USysRibbonImages" という名前を付けて保存します。

Access は自動的に添付ファイルのコントロールを作成し、レポートを対応するレコード ソースにバインドします。デザインに関する追加の作業は必要ありません。以上により、添付ファイルのコントロールをクリックして、データベースにイメージを読み込むことができるようになりました。次の手順では、このフォームを自動化し、添付ファイルのコントロールを使用してイメージを読み込みます。

メモ:   イメージの格納に必要なレコードの数は、前のセクションでスキーマに採用した方法によって異なります。

データベースにカスタム イメージを読み込むためのコードについては、この記事の「高度なシナリオ: コード記述」で説明されています。

シナリオ: Marketing Projects データベース

これまでにリボンのカスタマイズ方法とイメージの追加方法を学習しました。次は、Access 2007 で提供されている Marketing Projects データベースを使用して、学んだ知識を活用します。他のソフトウェア プロジェクトのデザインと同様に、顧客シナリオとデザインの要件について把握しておく必要があります。このプロジェクトのデザインの目標は、プロジェクトおよびその状況を追跡するための直観的で使いやすいユーザー インターフェイスの提供です。アプリケーションのデザインの目標は次のとおりです。

  • ホーム画面と各種フォーム間のナビゲーションを簡略化して、ユーザーがアプリケーションの最も重要な機能に集中できるようにする。
  • 不要なコマンドや、初心者が誤って使用することによりデータベースに問題を引き起こす可能性のあるコマンドを UI から取り除く。
  • 縦方向のスペースをできるだけ多く確保する。このためには、従来フォーム ツール バーに読み込まれていたコマンドをリボンに移動する必要があります。
メモ:   Marketing Projects データベースの完成版は、Marketing Projects.exe (英語) からダウンロードできるファイルに含まれています。

ステップ 1: Marketing Projects データベースの作成

次の手順に従って、Marketing Projects データベースを作成します。

  1. Access 2007 を起動します。
  2. [Microsoft Office Access - 作業の開始] 画面から Marketing Projects データベースのテンプレートを選択します。左側のウィンドウで [お勧め] をクリックし、[Marketing Projects] をクリックします。次に、[ダウンロード] をクリックします。
    メモ:   この手順は、インターネットに接続されているか、または、既に Microsoft Office オンラインから Marketing Projects テンプレートをダウンロード済みであることを前提としています。

ステップ 2: リボンのカスタマイズ内容を格納するテーブルの作成

次の手順に従ってカスタム リボン UI を実装し、アプリケーション開始時に使用可能な状態にします。

  1. リボンの [作成] タブをクリックします。
  2. [テーブル] をクリックします。

    新規テーブルが表示されます。

  3. 記事内の「ローカル テーブルからの XML の読み込み」で説明されている手順に従って、テーブルを作成します。
  4. テーブルに "USysRibbons" という名前を付けて保存します。

ステップ 3: RibbonX マークアップの貼り付け

続いて、既定のリボンを非表示にします。

  1. 表 4. の内容を使用して、USysRibbons テーブルにレコードを追加します。

    表 4. startFromScratch 属性の使用

    フィールド 内容
    RibbonNameHome
    RibbonXML
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
     <ribbon startFromScratch="true"/>
    </customUI>
  2. アプリケーションを終了して、再起動します。
  3. Microsoft Office ボタンをクリックし、[Access のオプション] をクリックします。
  4. 左のウィンドウで [カレント データベース] をクリックします。
  5. [リボンとツール バーのオプション] セクションで、[リボン名] ボックスから [Home] リボン を選択します。
  6. アプリケーションを終了して、再起動します。

startFromScratch 属性の設定によって、既定の内容がリボンでは非表示になります。アプリケーションは、図 1. のように表示されます。

図 1. 白紙状態のリボン

Bb187398.bb187398_fig1(ja-jp,office.12).gif

これで、独自のカスタム リボンを作成する準備ができました。

ステップ 4: 新しい [Home] タブの作成

このステップでは、新しいタブとグループを作成し、コントロールを追加します。

表 5. の内容が反映されるように、USysRibbons テーブルのレコードを修正します。

表 5. 新しい [Home] タブの作成

フィールド 内容
RibbonNameHome
RibbonXML
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 <ribbon startFromScratch="true">
  <tabs>
<tab id="tabMain" label="Home">
 <group id="grpProjects" label="Projects"/>
   </tab>
  </tabs>
 </ribbon>
</customUI>

アプリケーションを終了して再起動し、リボンに対する変更を確認します。アプリケーションは、図 2. のように表示されます。

図 2. 新しい [Home] タブとプロジェクト グループ

Bb187398.bb187398_fig2(ja-jp,office.12).gif

ステップ 5: [Home] タブのコントロールの作成

今度は、新しいタブに複数のコントロールを追加して、ユーザーがアプリケーション内を移動できるようにします。

簡単なボタンの作成

次の内容が反映されるように、USysRibbons テーブルのレコードを修正します。

表 6. [Home] ボタンの作成

フィールド 内容
RibbonNameHome
RibbonXML
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 <ribbon startFromScratch="true">
  <tabs>
   <tab id="tabMain" label="Home">
    <group id="grpProjects" label="Projects">
     <button id="cmdHome" label="Home" onAction="Ribbon.MarketingProjectsHome" size="large" 
     imageMso="OpenStartPage" supertip="Return to the Marketing Projects home page. 
     Hold down the right shift key to open the database with full menus."/>
    </group>
   </tab>
  </tabs>
 </ribbon>
</customUI>

アプリケーションを終了して再起動し、リボンに対する変更を確認します。アプリケーションは、図 3. のように表示されます。

図 3. 新たに [Home] ボタンの付いた [Home] タブ

Bb187398.bb187398_fig3(ja-jp,office.12).gif

XML の内容について説明します。

  • imageMso 属性は、2007 Office system アイコン ギャラリーから引用されるリボンのイメージ名を示します。
  • onAction 属性は、マクロ オブジェクト Ribbon を生成するマクロ Ribbon.MarketingProjectsHome を実行するためのものです。このオブジェクトには、OpenForm アクションを呼び出して Marketing Projects の Home フォームを表示する MarketingProjectsHome というアクションが含まれます。
リボンの onAction イベントを処理するマクロを作成する
  1. データベース ウィンドウの [作成] タブで [詳細設定] をクリックし、[マクロ] をクリックします。
  2. [マクロ] ウィンドウで、次のアクションを追加します。

    [マクロ名]: MarketingProjectsHome

    [アクション]: OpenForm

    [引数]: Marketing Projects Home, Form, , , Edit,

  3. [リボン] タブを右クリックし、[保存] をクリックします。
  4. [名前を付けて保存] ダイアログ ボックスで、「Ribbon」と入力します。
  5. 以上で、マクロが使用可能になりました。カスタマイズした [Home] ボタンをクリックして試してみます。
  6. Marketing Projects に関連する他のフォームやレポートを表示するための簡単なボタンをいくつか追加します。ボタンを使用することで、重要なオブジェクトを目立たせることができます。この後のセクションで、使用頻度の低い補完的なレポートを含むメニューを作成します。
  7. 表 7. の内容が反映されるように、USysRibbons テーブルのレコードを修正します。

    表 7. USysRibbons テーブル レコードへのボタンの追加

    フィールド 内容
    RibbonNameHome
    RibbonXML
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
     <ribbon startFromScratch="true">
      <tabs>
      <tab id="tabMain" label="Home">
       <group id="grpProjects" label="Projects">
        <button id="cmdHome" label="Home" onAction="Ribbon.MarketingProjectsHome" size="large" 
        imageMso="OpenStartPage" supertip="Return to the Marketing Projects home page. 
        Hold down the right shift key to open the database with full menus."/>
        <button id="cmdNewProject" label="New Project" imageMso="GoToNewRecord" 
        size="large" onAction="Ribbon.NewProject"/>
        <button id="cmdProjectList" label="Open Projects List" imageMso="ShowDetailsPage" size="large" 
        onAction="Ribbon.OpenProjectsList"/>
        <button id="cmdProjectsAllOpenProjects" label="All Open Projects" 
        imageMso="ViewsReportView" size="normal" onAction="Ribbon.ProjectsAllOpen"/>
        <button id="cmdProjectDeliverables" label="Project Deliverables" 
        imageMso="ViewsReportView" size="normal" onAction="Ribbon.ProjectsDeliverables"/>
        <button id="cmdProjectsCommonDeliverables" label="Common Deliverables" 
        imageMso="ReviewShareWorkbook" size="large" onAction="Ribbon.ProjectsCommonDeliverables"/>
        </group>
       </tab>
      </tabs>
     </ribbon>
    </customUI>
  8. アプリケーションを終了して再起動し、リボンに対する変更を確認します。

アプリケーションのリボンは、図 4. のように表示されます。

図 4. 追加されたボタン

Bb187398.bb187398_fig4(ja-jp,office.12).gif

メニュー コントロールの作成

続いて、今回の Marketing Projects に関係する他のレポートを表示するために、メニュー コントロールを追加します。

表 8. の内容が反映されるように、USysRibbons テーブルのレコードを修正します。

表 8. ボタンの追加

フィールド 内容
RibbonNameHome
RibbonXML
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 <ribbon startFromScratch="true">
  <tabs>
   <tab id="tabMain" label="Home">
    <group id="grpProjects" label="Projects">
     <button id="cmdHome" label="Home" onAction="Ribbon.MarketingProjectsHome" size="large" 
     imageMso="OpenStartPage" supertip="Return to the Marketing Projects home page. 
     Hold down the right shift key to open the database with full menus."/>
     <button id="cmdNewProject" label="New Project" imageMso="GoToNewRecord" size="large" 
     onAction="Ribbon.NewProject"/>
     <button id="cmdProjectList" label="Open Projects List" 
     imageMso="ShowDetailsPage" size="large" onAction="Ribbon.OpenProjectsList"/>
     <button id="cmdProjectsAllOpenProjects" label="All Open Projects" 
     imageMso="ViewsReportView" size="normal" onAction="Ribbon.ProjectsAllOpen"/>
     <button id="cmdProjectDeliverables" label="Project Deliverables" imageMso="ViewsReportView" size="normal" 
     onAction="Ribbon.ProjectsDeliverables"/>
     <menu id="mnuProjectsReports" label="More Reports" 
     imageMso ="ViewsReportView" itemSize="large" >
      <button id="cmdProjectsCompletedAndDeferred" label="Completed and Deferred Projects" 
      imageMso="ViewsReportView" onAction="Ribbon.ProjectsCompletedAndDeferred"/>
      <button id="cmdProjectsBalanceSheet" label="Project Balance Sheet" 
      imageMso="ViewsReportView" onAction="Ribbon.ProjectsBalanceSheet"/>
     </menu>
     <button id="cmdProjectsCommonDeliverables" label="Common Deliverables" 
    imageMso="ReviewShareWorkbook" size="large" onAction="Ribbon.ProjectsCommonDeliverables"/>
    </group>
   </tab>
  </tabs>
 </ribbon>
</customUI>

アプリケーションを終了して再起動し、リボンに対する変更を確認します。アプリケーションのリボンは、図 5. および 図 6. のように表示されます。

図 5. [More Reports] ボタンの付いたリボン

Bb187398.bb187398_fig5(ja-jp,office.12).gif

図 6. [More Reports] ボタンのオプション

Bb187398.bb187398_fig6(ja-jp,office.12).gif

分割ボタンの作成

続いて、ベンダーと従業員に関連するオブジェクト用にグループを 2 つ追加します。各グループには、"分割ボタン" が含まれます。"分割ボタン" とは、ボタンとメニューが組み合わされたボタンです。メニューの各項目と同様に、メイン ボタンには固有の定義とアクションが含まれます。たとえば、メイン ボタンのフォームを開くと、メニュー部分に詳細オプションの一覧が表示されるように設定することができます。

表 9. の内容が反映されるように、USysRibbons テーブルのレコードを修正します。

表 9. 分割ボタンの追加

フィールド 内容
RibbonName Home
RibbonXML
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 <ribbon startFromScratch="true">
  <tabs>
   <tab id="tabMain" label="Home">
    <group id="grpProjects" label="Projects">
     <button id="cmdHome" label="Home" onAction="Ribbon.MarketingProjectsHome" size="large" 
     imageMso="OpenStartPage" supertip="Return to the Marketing Projects home page. 
     Hold down the right shift key to open the database with full menus."/>
     <button id="cmdNewProject" label="New Project" 
     imageMso="GoToNewRecord" size="large" onAction="Ribbon.NewProject"/>
     <button id="cmdProjectList" label="Open Projects List" 
     imageMso="ShowDetailsPage" size="large" onAction="Ribbon.OpenProjectsList"/>
     <button id="cmdProjectsAllOpenProjects" label="All Open Projects" 
     imageMso="ViewsReportView" size="normal" onAction="Ribbon.ProjectsAllOpen"/>
     <button id="cmdProjectDeliverables" label="Project Deliverables" 
     imageMso="ViewsReportView" size="normal" 
onAction="Ribbon.ProjectsDeliverables"/>
     <menu id="mnuProjectsReports" label="More Reports" imageMso ="ViewsReportView" itemSize="large" >
      <button id="cmdProjectsCompletedAndDeferred" label="Completed and Deferred Projects" 
      imageMso="ViewsReportView" onAction="Ribbon.ProjectsCompletedAndDeferred"/>
      <button id="cmdProjectsBalanceSheet" label="Project Balance Sheet" 
imageMso="ViewsReportView" onAction="Ribbon.ProjectsBalanceSheet"/>
     </menu>
      <button id="cmdProjectsCommonDeliverables" label="Common Deliverables" 
      imageMso="ReviewShareWorkbook" size="large" onAction="Ribbon.ProjectsCommonDeliverables"/>
    </group>
    <group id="grpVendors" label="Vendors">
     <splitButton id="cmdVendorSplitButton" size="large" >
      <menu id="mnuVendor" imageMso ="RecordsAddFromOutlook" itemSize="large" >
       <button id="cmdVendorList"  label="Vendor List" imageMso="RecordsAddFromOutlook" 
      onAction="Ribbon.VendorList"/>
       <button id="cmdVendorAddressBook" label="Address Book" imageMso="ViewsReportView" 
       onAction="Ribbon.VendorAddressBook"/>
       <button id="cmdVendorPhoneList" label="Phone List" imageMso="ViewsReportView" 
       onAction="Ribbon.VendorPhoneList"/>
      </menu>
     </splitButton>
    </group>
    <group id="grpEmployees" label="Employees">
     <splitButton id="cmdEmployeeSplitButton" size="large" >
      <menu id="mnuEmployee" label="My Menu" 
      imageMso ="ViewsReportView" itemSize="large" >
       <button id="cmdEmployeeList"  label="Employee List" 
       imageMso="RecordsAddFromOutlook" onAction="Ribbon.EmployeeList"/>
       <button id="cmdEmployeeAddressBook" label="Address Book" 
imageMso="ViewsReportView" onAction="Ribbon.EmployeeAddressBook"/>
       <button id="cmdEmployeePhoneList" label="Phone List" 
       imageMso="ViewsReportView" onAction="Ribbon.EmployeePhoneList"/>
      </menu>
     </splitButton>
    </group>
   </tab>
  </tabs>
 </ribbon>
</customUI>

アプリケーションを終了して再起動し、リボンに対する変更を確認します。アプリケーションのリボンは、図 7. および 図 8. のように表示されます。

図 7. 新たに分割ボタンの付いたリボン

Bb187398.bb187398_fig7(ja-jp,office.12).gif

図 8. 分割ボタンのオプション

Bb187398.bb187398_fig8(ja-jp,office.12).gif

ステップ 6: Microsoft Office ボタンのカスタマイズ

ここでは、アプリケーションの外観をさらに使用目的に適したものにするために、Microsoft Office ボタンのコマンドをカスタマイズします。最上部に [データベースの最適化/修復] コマンドを配置し、[開く]、[新規作成]、[名前を付けて保存] の各メニュー コマンドは非表示にします。

表 10. の内容が反映されるように、USysRibbons テーブルのレコードを修正します。

表 10. Microsoft Office ボタンのカスタマイズ

フィールド 内容
RibbonName Home
RibbonXML
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 <ribbon startFromScratch="true">
  <officeMenu>
   <button idMso="FileCompactAndRepairDatabase" insertBeforeMso ="FileCloseDatabase" />
   <button idMso="FileOpenDatabase" visible="false"/>
   <button idMso="FileNewDatabase" visible="false"/>
   <splitButton idMso="FileSaveAsMenuAccess" visible="false" />
  </officeMenu>
  <tabs>
   <tab id="tabMain" label="Home">
    <group id="grpProjects" label="Projects">
     <button id="cmdHome" label="Home" onAction="Ribbon.MarketingProjectsHome" size="large" 
      imageMso="OpenStartPage" supertip="Return to the Marketing Projects home page. 
      Hold down the right shift key to open the database with full menus."/>
     <button id="cmdNewProject" label="New Project" imageMso="GoToNewRecord" size="large" 
     onAction="Ribbon.NewProject"/>
     <button id="cmdProjectList" label="Open Projects List" 
     imageMso="ShowDetailsPage" size="large" onAction="Ribbon.OpenProjectsList"/>
     <button id="cmdProjectsAllOpenProjects" label="All Open Projects" 
      imageMso="ViewsReportView" size="normal" onAction="Ribbon.ProjectsAllOpen"/>
     <button id="cmdProjectDeliverables" label="Project Deliverables" 
      imageMso="ViewsReportView" size="normal" onAction="Ribbon.ProjectsDeliverables"/>
     <menu id="mnuProjectsReports" label="More Reports" imageMso ="ViewsReportView" itemSize="large" >
      <button id="cmdProjectsCompletedAndDeferred" label="Completed and Deferred Projects" 
      imageMso="ViewsReportView" onAction="Ribbon.ProjectsCompletedAndDeferred"/>
      <button id="cmdProjectsBalanceSheet" label="Project Balance Sheet" 
      imageMso="ViewsReportView" onAction="Ribbon.ProjectsBalanceSheet"/>
     </menu>
      <button id="cmdProjectsCommonDeliverables" label="Common Deliverables" 
      imageMso="ReviewShareWorkbook" size="large" onAction="Ribbon.ProjectsCommonDeliverables"/>
    </group>
    <group id="grpVendors" label="Vendors">
     <splitButton id="cmdVendorSplitButton" size="large" >
      <menu id="mnuVendor" imageMso ="RecordsAddFromOutlook" itemSize="large" >
       <button id="cmdVendorList"  label="Vendor List" 
       imageMso="RecordsAddFromOutlook" onAction="Ribbon.VendorList"/>
       <button id="cmdVendorAddressBook" label="Address Book" 
       imageMso="ViewsReportView" onAction="Ribbon.VendorAddressBook"/>
       <button id="cmdVendorPhoneList" label="Phone List" imageMso="ViewsReportView" 
       onAction="Ribbon.VendorPhoneList"/>
      </menu>
     </splitButton>
    </group>
    <group id="grpEmployees" label="Employees">
     <splitButton id="cmdEmployeeSplitButton" size="large" >
      <menu id="mnuEmployee" label="My Menu" imageMso ="ViewsReportView" itemSize="large" >
       <button id="cmdEmployeeList"  label="Employee List" imageMso="RecordsAddFromOutlook" 
       onAction="Ribbon.EmployeeList"/>
       <button id="cmdEmployeeAddressBook" label="Address Book" 
       imageMso="ViewsReportView" 
       onAction="Ribbon.EmployeeAddressBook"/>
       <button id="cmdEmployeePhoneList" label="Phone List" 
       imageMso="ViewsReportView" 
       onAction="Ribbon.EmployeePhoneList"/>
      </menu>
     </splitButton>
    </group>
   </tab>
  </tabs>
 </ribbon>
</customUI>

アプリケーションを終了して再起動し、リボンに対する変更を確認します。アプリケーションの Microsoft Office ボタンは、図 9. のように表示されます。

図 9. Microsoft Office ボタンの新たなオプション

Bb187398.bb187398_fig9(ja-jp,office.12).gif

なお、idMso 属性で内部コマンド名を示すことにより、任意の内部コマンドを再利用することができます。また、insertBeforeMso 属性および insertAfterMso 属性を使用すると、他の組み込みコマンドとに対する位置を調整することができます。

ステップ 7: ベンダー一覧フォームのカスタマイズ

これまでのステップで、データベースで使用するメイン リボンのカスタマイズが完了しました。次は、アプリケーション フォームをカスタマイズします。このセクションでは、ベンダー一覧のフォームをカスタマイズします。カスタム リボンと関連付けるアプリケーション フォームには、すべて同じ手順を適用することができます。

表 11. の内容が反映されるように、USysRibbons テーブルで新しいレコードを作成します。

表 11. 新しいテーブル レコードの作成

フィールド 内容
RibbonName VendorList
RibbonXML
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 <ribbon>
  <contextualTabs>
   <tabSet idMso="TabSetFormReportExtensibility">
    <tab id="MyTab" label="Form">
     <group id="ListCommands" label="List Commands">
      <button id="cmdHome" label="Home" imageMso="OpenStartPage" supertip="Return to the Marketing 
      Projects home page." size="large" 
      onAction="Ribbon.MarketingProjectsHome"/>
      <button id="cmdNewVendor" label="New Vendor" imageMso="GoToNewRecord" size="large" 
      onAction="Ribbon.NewVendor"/>
      <button id="cmdAddFromOutlook" label="Add From Outlook" imageMso="RecordsAddFromOutlook" size="large" 
      onAction="Ribbon.AddFromOutlook"/>
      <button idMso="ExportExcel" label="Export to Excel" size="normal"/>
      <button idMso="FileSendAsAttachment" label="Send as Attachment" size ="normal"/>
      <button id="cmdCollectDataViaEmail" label="Collect Data via E-mail" imageMso="CreateEmail" size="normal" 
      onAction="Ribbon.VendorsCollectDataViaEmail"/>
     </group>
     <group idMso="GroupClipboard"></group>
     <group idMso="GroupRecords"></group>
     <group idMso="GroupSortAndFilter"></group>
     <group idMso="GroupFindAccess"></group>
    </tab>
   </tabSet>
  </contextualTabs>
 </ribbon>
</customUI>

アプリケーションを終了して再起動し、リボンに対する変更を確認します。アプリケーションのリボンは、図 10. のように表示されます。

図 10. リボンの変更

Bb187398.bb187398_fig10(ja-jp,office.12).gif

ここで、XML に関して注意すべき点は、次のとおりです。

  • <tabSet idMso="TabSetFormReportExtensibility"> 要素を指定すると、リボンで適切なタブセットに内容を挿入できるようになります。タブセットの既定の名前は、現在のオブジェクトの "標題" プロパティに対応します。標題が指定されていない場合、Access は既定でそのオブジェクト名を使用します。
  • <button idMso="ExportExcel" label="Export to Excel" size="normal"/> 要素には、onAction コールバックが指定されていません。これは、組み込みコマンドを再利用しているためです。ボタンをクリックすると、リボンでは、このコマンドに定義されている既定のアクションが実行されます再利用時は、宣言に独自のアクションを指定することができます。

[Form] タブのコマンドは、2 つのカテゴリに分かれます。[List Commands] グループには、このフォームにのみ適用されるコマンドが含まれます。それ以外の部分は組み込みのグループから構成され、データベース内の全フォームに適用可能なデータ エントリおよび分析ツールが含まれています。

ステップ 8: アドレス帳レポートのカスタマイズ

前のセクションで使用した手法を使用して、レポートのカスタマイズを行います。

次の内容が反映されるように、USysRibbons テーブルで新しいレコードを作成します。

表 12. レポートのカスタマイズ

フィールド 内容
RibbonName Reports
RibbonXML
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
 <ribbon>
  <contextualTabs>
   <tabSet idMso="TabSetFormReportExtensibility">
    <tab id="MyTab" label="Report">
     <group id="ListCommands" label="Commands">
      <button id="cmdHome" label="Home" imageMso="OpenStartPage" supertip="Return to the Marketing 
      Projects home page." size="large" 
      onAction="Ribbon.MarketingProjectsHome"/>
      <button idMso="FilePrintQuick" size="large"/>
      <button idMso="FileSendAsAttachment" size="large"/>
      <button idMso="PublishToPdfOrEdoc" size="large"/>
     </group>
     <group idMso="GroupClipboard"></group>
     <group idMso="GroupSortAndFilter"></group>
     <group idMso="GroupFindAccess"></group>
    </tab>
   </tabSet>
  </contextualTabs>
 </ribbon>
</customUI>

アプリケーションを終了して再起動し、リボンに対する変更を確認します。リボンは、図 11. のように表示されます。

図 11. [Report] タブ

Bb187398.bb187398_fig11(ja-jp,office.12).gif

レポートのカスタマイズ手順は同じです。ただし、リボンのデザインが異なります。[Report] タブには、アプリケーションのレポートすべてに適用される汎用コマンドが含まれます。

高度なシナリオ: コードの記述

次に、VBA コードの記述を必要とする Access RibbonX の高度なシナリオの実装方法について学習します。次のシナリオに基づいてコードを記述する必要があります。

  • リモートの場所から XML を読み込む。
  • コールバックを実装する。
  • カスタム イメージを読み込む。

リモートからのコードの読み込み

ローカルの USysRibbons テーブル以外の場所から カスタム XML を読み込む場合、次の手順を実行する必要があります。

  1. 希望する場所から XML データを読み出すことができる関数を作成します。
  2. 起動時に読み込み用の関数を呼び出すための AutoExec マクロを作成します。
  3. 任意の場所から XML を読み込むためのモジュールおよび関数を作成します。

最初に、XML の保存場所を作成します。

リモートからコードを読み込む

  1. USysRibbons テーブルの名前を変更します。

    その結果、Access はこのテーブルから自動的にカスタム XML を読み込まなくなります。

    その後、以下の手順によって、起動時にリボンを読み込む VBA モジュールおよびマクロを作成します。

  2. Access を起動し、新規または既存のデータベースを開きます。
  3. [データベース ツール] タブで、[Visual Basic] をクリックします。
  4. [作成] タブで、[詳細設定] をクリックし、[モジュール] をクリックします。
  5. Visual Basic エディタで、[表示] メニューの [プロパティ ウィンドウ] をクリックします。
  6. ウィンドウ内で、[オブジェクト名] ボックスのモジュール名を RibbonLoader に変更します。
  7. コード ウィンドウに、次の VBA コードを挿入します。
    Option Compare Database
    
    Function LoadRibbons()
    Dim i As Integer
    Dim db As DAO.Database
    Set db = Application.CurrentDb
        
    For i = 0 To (db.TableDefs.Count - 1)
        If (InStr(1, db.TableDefs(i).Name, "Ribbons")) Then
            Dim rs As DAO.Recordset
            Set rs = CurrentDb.OpenRecordset(db.TableDefs(i).Name)
            rs.MoveFirst
    
            While Not rs.EOF
                Application.LoadCustomUI rs("RibbonName").Value, rs("RibbonXml").Value
                rs.MoveNext
            Wend
            rs.Close
            Set rs = Nothing
        End If
    Next i
    
    db.Close
    Set db = Nothing
    End Function
    

    このコードは、名前に "Ribbons" が含まれるテーブルからレコードセットを作成します。次に、リボンを読み込んでデータベースで使用可能にするために、LoadCustomUI メソッドを呼び出します。最後に、レコードセットと、DAO.Database オブジェクトへの参照を閉じます。

コールバックの実装

次の例では、group 要素が label 属性と共に宣言されています。このグループのラベルは静的で、グループの作成時に設定されます。

<group id="Navigation" label="Navigation">

次の例では、group 要素が getLabel 属性と共に宣言されています。このグループが作成された時点で、リボンは getLabel 関数を呼び出してラベルの値を取得します。

<group id="Navigation" getLabel="onGetLabel">

次の例は、リボンが前の例の XML を評価する際に呼び出される VBA 関数を示しています。

Function onGetLabel(control As IRibbonControl, ByRef label)          
    Select Case control.ID
    Case "Navigation":
        Label = "dynamic label text!"
    End Select
End Function

コールバックの関数シグニチャは、コントロールによって異なることがあります。

カスタム イメージの読み込み

次の VBA の例は、カレント データベースの "添付ファイル" フィールドからイメージを読み込むためのコールバック関数 getImage の実装方法を示すものです。この関数は、前の手順で作成したフォームを使用してイメージを読み込みます。

この例では、適用されるイメージはすべて同一のレコードに格納されています。

Option Compare Database
Option Explicit
Dim formOpened As Boolean
Dim attach As Attachment

Function GetImage(imageId As String, ByRef image)
    If (Not formOpened) Then
        DoCmd.OpenForm "USysRibbonImages", acNormal, , , acFormReadOnly, acHidden
        Set attach = Forms("USysRibbonImages").Controls("Images")
        formOpened = True
    End If
    Set image = attach.PictureDisp(imageId)
End Function

この関数では、USysRibbonImages フォームが読み取り専用として非表示モードで開かれます (つまり、UI として表示されません)。続いて、イメージがイメージ コントロールから取得されます。その後、リボンが要求したイメージ ID に対応する名前を持つイメージが返されます。

次の例では、適用されるイメージが別々のレコードに格納されています。レコードの Images フィールドに複数のイメージが格納されている場合、既定では最初のイメージが取得されます。

Function GetImage(imageId As String, ByRef image)
    Static frmRibbonImages As Form_USysRibbonImages
    Static rsForm As DAO.Recordset2
    Dim rsAttachments As DAO.Recordset2
    If frmRibbonImages Is Nothing Then
        DoCmd.OpenForm "USysRibbonImages", WindowMode:=acHidden
        Set frmRibbonImages = Forms("USysRibbonImages")
        Set rsForm = frmRibbonImages.Recordset
    End If
    
    rsForm.FindFirst "ControlID='" & control.ID & "'"
    If rsForm.NoMatch Then
        ' No image found
        Set image = Nothing
    Else
        Set image = frmRibbonImages.RibbonImages.PictureDisp
    End If
End Function

まとめ

リボンを特定の用途に適するようにカスタマイズできることは、Access 2007 の開発者向け新機能の中で最も優れた機能の 1 つです。この記事では、リボン拡張 (RibbonX) 用の XML マークアップとマクロのみを使用して、Access 2007 データベースのカスタム リボンを作成する方法を学習しました。さらに、VBA コードを必要とする高度なシナリオについても学習しました。リボンは、コマンドを表示するための新たなユーザー モデルです。これにより、ユーザーはアプリケーションでコマンドをより見つけやすく、操作しやすくなります。この新たな UI と拡張機能を活用して、アプリケーションの外観をまったく新しいものにすることができます。

追加情報

詳細については、次の情報を参照してください。

付録

表 13. は、RibbonX で使用可能な属性を簡単にまとめたものです。

表 13. RibbonX の属性

属性 型または値 説明
description 文字列itemSize="large" でメニューに表示される説明用プロパティです。
enabled TrueFalse コントロールの使用可能状態を示します。
getDescription コールバックコントロールの説明を取得します。
getEnabled コールバックコントロールの使用可能状態を取得します。
getImage コールバック該当のコントロールのイメージを取得します。
getLabel コールバックコントロールのラベルを取得します。
getPressed コールバックトグル ボタンやチェック ボックスの選択状態を取得します。
getSupertip コールバックコントロールの詳細なヒント ("役立つヒント") を取得します。
getTooltip コールバックコントロールのヒントを取得します。
getVisible コールバックコントロールの表示状態を取得します。
id 文字列コントロールの識別用に指定する一意の ID を示します。
idMso コントロール ID組み込みのコントロール ID を示します。
idQ 修飾 ID修飾名を示します。
image 文字列COM ではイメージ ストリングを示し、VBA ではリレーションシップ IDに相当します。
imageMso コントロール IDカスタム コントロールに組み込みコントロールのアイコンをコピーします。
insertAfterMso コントロール ID組み込みコントロール ID の後ろに配置します。
insertAfterQ 修飾 ID修飾名を持つコントロールの後ろに配置します。
insertBeforeMso コントロール ID組み込みコントロール ID の前に配置します。
insertBeforeQ 修飾 ID修飾名を持つコントロールの前に配置します。
label 文字列コントロールのラベルを示します。
onAction コールバックユーザーが該当のコントロールをクリックすると呼び出される関数です。
pressed TrueFalse 該当のチェック ボックスまたはトグル ボタンが選択されているかどうかを示します。
showLabel TrueFalse コントロールのラベルを表示するかどうかを示します。
size normal、largeイメージのサイズを示します。
supertip 文字列コントロールの詳細なヒント ("役に立つヒント") を示します。
tooltip 文字列コントロールのヒントを示します。
visible TrueFalse コントロールの表示状態を示します。
表示:
© 2015 Microsoft