TechNet マガジン > ホーム > 発行物 > 2009 > TechNet Magazine May 2009 >  Microsoft Office: Office 2007 リボンのカスタマイズ ガイド
Microsoft Office
Office 2007 リボンのカスタマイズ ガイド
Stephanie Krieger
概要:
  • Office オープン XML ファイルのアーキテクチャ
  • カスタムのリボン タブを作成する手順
  • VBA マクロをリボンに追加する手順
2007 Microsoft Office system 環境の管理者であれ、環境をカスタマイズするのが好きな Microsoft Office パワー ユーザーであれ、Visual Basic for Applications (VBA) マクロを作成するユーザーであれ、2007 Office system ドキュメント、テンプレート、およびアドインのリボンをいかに簡単にカスタマイズできるかには興味があると思います。必要なのは、Windows に組み込まれているメモ帳だけです。この記事では、その方法を紹介します。
カスタム UI の作成にすぐに取りかかるために、この記事では Office オープン XML 形式と VBA についてある程度の知識があることを前提としています。Office オープン XML ドキュメントが、XML ファイル (通称、文書パーツ)、その他のファイル (ドキュメントに含まれるメディア ファイルなど)、およびこれらの要素をまとめるいくつかのフォルダで構成される ZIP パッケージであることは、既にご存じだと思います。また、Office オープン XML マークアップやそれに類似するものを (実際に記述したことはないとしても) 見たこともあるでしょう。つまり、Office オープン XML は非常に簡単な言語で記述されていることを既にご存じだと思います。また、この言語を理解するには、開発者に匹敵する知識は必要ありません。なお、(組み込みのコマンドだけでなく) 独自のマクロをカスタムのリボンに追加する必要がある場合を考慮し、この記事では VBA についても取り上げます。
Office オープン XML ドキュメントに馴染みがない場合は、リボンのカスタマイズに着手する前に、次の手順に従ってファイル構造を確認してください。
  1. 単純な Office Word 2007 ドキュメントを作成し、ファイルを保存して閉じます。
  2. 新規作成したドキュメントのファイル拡張子を .zip に変更します。
  3. この ZIP パッケージを開き、内容を確認します。このパッケージを開いた最初の状態は、図 1 のようになります。
  4. _rels フォルダを開くと、.rels という名前のファイルがあります。このファイルは、ここに表示されている最上位のドキュメント コンポーネント間の関係を定義します。この記事では、後でこの .rels ファイルを編集します。
  5. 次に word フォルダを開きます。このフォルダには document.xml (ドキュメント本体)、styles.xml、おそらくお馴染みのその他のパーツなどが保持されています。
図 1 Office オープン XML ドキュメントの構造
また、ファイルの内容によっては、その他のファイルやフォルダが表示される場合があります。たとえば、ドキュメントに画像や音声ファイルなどのメディアが含まれている場合は、media フォルダが表示されます。

カスタムのリボンを作成する手順
この記事で説明する手順よりも、はるかに複雑な方法もあります。しかし、私は、どのような作業でも最も簡単なソリューションを使用したいと考えています。2007 Office system の Word、Excel、または PowerPoint ファイルのリボンをカスタマイズするには、次の作業を行うだけで十分です。
  1. customUI.xml という名前のファイルを作成し、このファイルにカスタマイズを行うのに必要なマークアップを追加します。
  2. customUI という名前のファイル フォルダを作成し、このフォルダに customUI.xml ファイルを格納して、このフォルダをドキュメントの ZIP パッケージの最上位にドロップします。
  3. .rels という名前のファイルを開き、カスタマイズしたリボンについての情報をドキュメントに通知するマークアップを 1 行追加します。
  4. ドキュメントを開き、出来上がりを眺めて悦に入ります。
これだけです。この記事では、これらの手順の具体的な作業について説明します。

準備する必要があるツール
customUI.xml ファイルは Windows に組み込まれているメモ帳を使用して記述できます。
また、Microsoft Web サイトから参考資料としてダウンロードすることをお勧めするものが 2 つあります。1 つ目は「2007 Office system ドキュメント: コントロール ID 一覧」です。このダウンロードには、リボン対応の 2007 Office system プログラムに組み込まれている全コマンドのリボン コントロール ID が記載されている Excel ブックが含まれています。2 つ目は「2007 Office system アドイン: アイコン ギャラリー」です。このダウンロードは、マクロ駆動型のブックで、Office 2007 のすべての組み込みのリボン アイコンの ID が含まれています。
パッケージの内容を編集したら、ファイル拡張子を .zip から元の拡張子に戻す必要があります。ただし、基になるパッケージの編集が必要になるたびに、拡張子を .zip に変更する必要はなく、Office オープン XML 形式のドキュメントを ZIP パッケージと認識するユーティリティを使用してパッケージを編集できます。このようなユーティリティを使用すれば、最初から拡張子を変える必要もありません。このようなユーティリティは少なくとも数種類ありますが、私が気に入っているものは、オープン ソースの 7-zip です。これをインストールしたら、Office オープン XML 形式のドキュメントを右クリックし、[7-zip] をポイントして、[開く] をクリックします。パッケージに含まれる XML 文書パーツを直接編集することも可能で、変更を保存するとパッケージを更新することを求めるメッセージが表示されます。
作業を開始する前に、もう 1 つ実行をお勧めする作業があります。Office アプリケーションには、UI エラーがあるファイルを開いた場合にメッセージが表示されるようにする設定があります。UI エラーによってカスタム リボンが表示されない場合があるため、その場で警告が表示されると便利です。このエラー メッセージでは、エラーが発生した場所についての情報も提供されるので、この点でも時間を節約できます。この設定は、Word、Excel、または PowerPoint (そして、Access でも) で有効にすることができ、すべてのドキュメントに適用されます。
  1. Word、Excel、または PowerPoint で、Microsoft Office ボタンをクリックし、メニューの一番下に表示される [<プログラム名> のオプション] をクリックします。
  2. [詳細設定] タブで、一番下にある [全般] 設定が表示されるまでスクロールします。[アドイン ユーザー インターフェイスに関するエラーを表示する] チェック ボックスをオンにし、[OK] をクリックします。
これで作業を開始できます。メモ帳を起動し、この記事の手順に従ってください。この記事のこれ以降で説明する手順を実行するのに必要なものは、メモ帳だけです。ただし、Microsoft Visual Studio 2008 をお持ちの場合は、ぜひ Visual Studio 2008 をご利用ください。マネージ コードを記述する (またはマネージ コードについての知識さえも) 必要はなく、Visual Studio 2008 を使用することで、非常に便利に Office オープン XML 文書パーツを編集できます。Visual Studio では customUI スキーマが認識され、IntelliSense メニューと自動の構文チェック機能を利用できるので、私は Visual Studio 2008 を使用しています。これで大幅に時間を節約できます。また、customUI スキーマの用語を学習するうえでも IntelliSense メニューは役立ちます。

カスタムのリボン タブを作成する
リボン対応の各 2007 Office system アプリケーションのリボンには複数のタブがあります。また、各タブには複数のグループがあり、各グループには複数のコマンドが表示されます。コマンドの表示には、ボタン、ギャラリー、分割ボタン、メニューなど、さまざまな種類のコントロールが使用されています。
組み込みのタブは (Microsoft Office ボタン メニューも) すべてカスタマイズできます。また、独自のカスタム タブを作成したり、カスタムのリボンをゼロから作成することもできます。もちろん、1 つの記事でリボンの実現可能なカスタマイズをすべて説明することはできませんが、ここでは多くのカスタマイズを紹介します。
まず、Word 用の単純なカスタム タブを作成します。このタブには、組み込みのコマンドを実行するいくつかのコマンドを表示します。ここでは、ユーザー向けのドキュメント テンプレートを作成する必要があるので、ユーザーが頻繁に使用する一連のコマンドが配置されたカスタム リボンが表示されるようにしたいと考えています。もちろん XML を記述することなく、テンプレートのクイック アクセス ツール バーにコマンドを配置することもできましたが、リボン上の他のコマンドと同じ大きさで表示し、この後すぐに、このタブに追加する他のカスタム コマンドと並べて表示したい思っています。新しいカスタム グループの外観は、図 2 のようになります。このタブの作成に使用した customUI.xml マークアップを次に示します。
<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/
office/2006/01/customui">
<Ribbon>
<tabs>
<tab id="customTab" label="My Custom Tab">
<group id="customGroup1" 
label="Helpful Tools">
  <gallery idMso="QuickStylesGallery"
  visible="true" size="large" />
  <button idMso="PasteSpecialDialog"
  visible="true" size="large" 
  imageMso="Paste"/>
  <button idMso="CrossReferenceInsert"
  visible="true" size="large" label="Insert a
  Cross-Reference" />
</group>
</tab>
</tabs>
</Ribbon>
</customUI>
図 2 シンプルなカスタム タブ
このマークアップの XML 構造を確認してみましょう。
  1. Office オープン XML の文書パーツを開くと、上記コードの最初の行と同じ行があります (赤いマークアップを参照)。これは、使用される形式を示すものです。ここに表示されているとおりに入力してください。2 行目は、ここで提供されるデータの種類を定義するタグです。これは customUI タグで、波線が引かれている属性 (xmlns) は、使用するスキーマを指定する名前空間定義です。これも、表示されているとおりに入力してください。
  2. ここで表示されているタグの多くはペアになっていることに注意してください (青いマークアップを参照)。先頭付近の開始タグとして customUI があります。customUI タグでは、Ribbon タグ、tabs タグ (リボン上の全タブのセットを参照)、tab タグ (作業対象の個々のタブを参照)、および group タグ (作成するグループを参照) が、この順番で記述されています。そして、新しいグループに配置するコマンドのデータの下には、逆の順番でそれぞれの終了タグがあります。これらのタグは、入れ子になっています。各タグは山かっこで囲まれていて、各タグ ペアの終了タグには左かっこの後にスラッシュがあります。また、各属性のすぐ後には等号と二重引用符で囲まれた値が続きます。スラッシュがないなどの些細なものでも、構文エラーがあると、カスタム UI は表示されません。
  3. このカスタム グループ内のコマンドは、それぞれ単独タグ内に記述されています (緑のマークアップを参照)。コマンドに必要なデータは、このタグ内にすべて記述されるため、これらのタグには終了タグは必要なく、入れ子になったタグはありません。したがって、これらの各タグの最後には、タグのデータの終了を示すスラッシュが挿入されています。ただし、すべてのリボン コントロールが、単独タグで表されるわけではないことに注意してください。たとえば、他のコントロールを追加するカスタム ギャラリーを作成する場合は、他のタグを入れ子にするために、タグのペアが必要になります。同様に、カスタム メニュー コントロールもタグのペアで表され、ボタンや他のコントロールを内部に追加できるようになっています。
では、もう少し詳しく見てみましょう。カスタム UI 構造に追加する各要素には、一意に識別されるなんらかの手段が必要です。
<tab id="customTab" label="My Custom Tab">
<group id="customGroup1" label="Helpful Tools">
作成したカスタム タブのタグとグループのタグには、それぞれ id 属性があることに注目してください。ファイル内で一意である限り、この属性値には好きな名前を設定できます (ただし、名前にスペースは含めないでください)。ここで他にカスタマイズが必要な属性は、label だけでした。
このカスタム タブに配置する 3 つのコマンドは 2007 Office system の組み込みのコマンドであるため、id 属性ではなく idMso 属性を使用する必要がありました。
<gallery idMso="QuickStylesGallery" visible="true" size="large" />
<button idMso="PasteSpecialDialog" visible="true" size="large" imageMso="Paste" />
<button idMso="CrossReferenceInsert" visible="true" size="large" label="Insert a Cross-Reference" />
これらのコントロール ID については、Word のリボン コントロールが一覧された Excel ブックを参照しました。これらのタグとその属性については指摘すべきことがいくつかあります。
1 つ目のコマンドはギャラリーで、残りの 2 つはボタンです。私がこれを知っているのはこれらの機能を使用したからですが、この情報は各プログラムのリボン コントロールが一覧された Excel ブックでも確認できます (コマンドの種類は ID の右隣に記載されています)。
visible 属性の既定値は true なので、理論的には追加する必要はありませんが、追加することをお勧めします。ある時点で、コマンドの表示と非表示を制御することが必要になることもあるためです。
一方、size 属性の既定値は normal です (Word、Excel、および PowerPoint の [ホーム] タブの [切り取り]、[コピー]、[書式のコピー/貼り付け] コマンドなどと同じサイズで表示されます)。コマンドを大きなサイズで表示する場合は、この属性を追加する必要があります。
2007 Office system プログラムの [形式を選択して貼り付け] コマンドは、既定では標準サイズで表示されるコマンドです。このような形で表示されるコマンドの中には、大きなサイズで表示した場合もアイコンが適切に表示されるものもありますが、このコマンドは違います。このコントロールのカスタム アイコンに何の処理も行わなかった場合、アイコンはぼやけた状態で表示されます。したがって、ここでは [ホーム] タブの [貼り付け] 分割ボタンに表示される [貼り付け] コマンドのイメージを追加しました。これは、[形式を選択して貼り付け] コマンドの button タグにある imageMso 属性で指定しています。
また、ここでは [相互参照] のラベルも少し調整しています。これについては、このコントロールの button タグを参照してください。既定では、単に "相互参照" と表示されますが、使用する状況を示す情報がタブ上には表示されないため、少しだけ情報を追加しました。

customUI ファイルを ZIP パッケージに追加する
次は、customUI という名前のフォルダをまだ作成していない場合は作成し、このフォルダに customUI.xml ファイルを格納します。この記事では、この customUI フォルダは Word テンプレートに追加します。また、このテンプレートにはリボンに追加するマクロを含める必要があるので、テンプレートは .dotm ファイル (マクロ対応の Word 2007 テンプレート) 形式で保存しました。なお、ここで説明する手順と同じ手順を使用して、Office 2007 オープン XML 形式の Word、Excel、PowerPoint のドキュメント、テンプレート、またはアドイン ファイルにカスタム UI を追加することができます。
customUI フォルダを追加する Office オープン XML パッケージを開き、customUI フォルダをドロップします。このフォルダは、_rels、docProps、およびプログラム固有のドキュメント フォルダ (word、xl、または ppt。カスタマイズするドキュメントにより異なります)、および [Content_Types].xml ファイルと併せて、最上位に配置されます。
次に、_rels フォルダを開き、.rels という名前のファイルを開きます (パッケージに含まれた状態でファイルを編集できるユーティリティを使用していない場合は、まず、このファイルをパッケージからコピーして取り出す必要があります)。このファイルには、customUI.xml ファイルと同様の入れ子になった構造があります。<Relationships … > タグのペア内に一連のリレーションシップが記述されており、各リレーションシップは単独タグで表されています。各リレーションシップのタグ (Relationship タグ) には、Id、Type、および Target という 3 つの属性が設定されています。
customUI コンテンツの次のタグを .rels ファイルに追加します。これは、必ず <Relationships …> タグのペアの開始タグと終了タグの間に追加するようにしてください。
<Relationship Id="rId5" 
Type="http://schemas.microsoft.com/office/2006/relationships/
ui/extensibility" Target="customUI/customUI.xml"/>
.rels ファイルに既に Id 属性が rId5 に設定されている Relationship タグがある場合は、別の番号を使用してください。ID は一意である必要があります。
この情報をファイルに追加すると、ファイルは 図 3 のような状態になります。メモ帳を使用して編集している場合、(図 3 のように) マークアップを構造的に表示するには、Internet Explorer でファイルを開きます。
図 3 編集した .rels ファイル
.rels ファイルを ZIP パッケージから取り出して編集する必要があった場合は、編集済みのファイルをパッケージにコピーします。次に、Word でファイルを開き、作業の結果を確認します。新しいタブ (この例では、My Custom Tab という名前のタブ) がリボンの右端に表示されます。

VBA マクロをリボンに追加する
組み込みのコマンドをリボンに追加するのは簡単でしたが、独自のツールを追加する必要がある場合はどうでしょうか。ここでは、その方法を説明します。
テンプレート ファイルを開き、Alt キーを押しながら F11 キーを押して、Visual Basic Editor (VBE) を起動します。VBE の左側に表示されるプロジェクト エクスプローラでテンプレートが選択されていない場合は、テンプレートを選択します。次に [挿入] メニューの [モジュール] をクリックして、テンプレートにコード モジュールを追加します。次に、図 4 に示すような単純なメッセージ ボックスを追加します (もちろん、任意のマクロを使用できます)。
図 4 テンプレートにコード モジュールを追加
VBA の経験が豊富な方や、これから VBA の知識を習得する予定の方へのお知らせですが、ここでは追加することが推奨されている要素が他にもあることに注意してください。ただし、これらの要素のいずれも、現在の作業 (このマクロをリボンに追加する作業) には必要ではなく、説明を簡略化するため、これらの作業については割愛します。
VBE を閉じる前に、リボンでマクロが認識されるように、このマクロに追加しなければならないものが 1 つあります。それは、このマクロをリボン コントロールとして宣言することです。そのためには、次のテキストをプロシージャ名の後のかっこ内に追加します。
ByVal Control as IRibbonControl
この時点で、マクロは次のような状態になります。
Sub TakeABreak(ByVal control As
  IRibbonControl)
MsgBox "Go get some coffee! You deserve it."
End Sub
customUI.xml ファイルにマクロ名を追加する必要があるので、マクロ名を確認しておいてください。これで、テンプレートを保存し、閉じます。
この時点で、カスタム タブの好きな場所に次のマークアップを追加することで、このコマンドを customUI.xml ファイルに追加できるようになりました。ここでは、このコマンド用に新しいグループを作成しました。これは、最初のグループの後に挿入します。
<group id="customGroup2" label="Break Time" >
  <button id="myBreak" visible="true"
  size="large" label="Take a Break"
  imageMso="HappyFace" 
  onAction="TakeABreak" />
</group>
このコンテンツは、前のグループの終了タグより後になり、カスタム タブの終了タグの前になる位置に追加してください。新しいグループを作成しない場合は、単独タグを使用して既存のグループ内にボタンの情報を追加します。
ここで注意すべき点がいくつかあります。
  • 新しいグループを作成する場合は、そのグループに固有の一意の ID が必要です。ここでは、このグループに一意のラベルを割り当てました。
  • この記事で作成した新しいボタンはカスタム コマンドを使用するため、idMso 属性ではなく id 属性を使用しています。最初のグループの作成時に確認した属性以外に、onAction 属性も追加しています。これは、マクロの呼び出しに使用する属性です。この属性の値には、マクロの名前を設定します。
  • Office オープン XML タグ名、属性名、および組み込みの 2007 Office system コントロール名で使用されている大文字と小文字の組み合わせは、通常、構文の他の要素と同様に要件の 1 つになります。
  • ここでは、アイコン ギャラリーの Excel ブックで提供されている HappyFace アイコンを使用しました。
新しいボタンを追加したら、ZIP パッケージに含まれている customUI.xml ファイルを更新します。パッケージ内の他のファイルを編集する必要はありません。テンプレートのみを開いてください (この場合、おそらくマクロを有効にする必要があります)。ファイルを開いたら、新しいボタンをクリックして、マクロをテストします。

さらにカスタマイズする
基本の作業が完了し、組み込みコマンドとカスタム コマンドを配置したカスタム タブを作成できたら、各種の属性を追加するだけで、さまざまなカスタマイズが可能です。次にいくつか例を示します。
リボンの右端以外の場所にタブを表示するには、タブの開始タグで insertBeforeMso 属性を使用して場所を指定します。たとえば、先ほど作成したタブをリボンの先頭 ([ホーム] タブの前) に表示するには、次のコードを使用します。
<tab id="customTab" label="My Custom Tab" 
insertBeforeMso="TabHome">
組み込みのタブの正式な名称については、各プログラムのリボン コントロールが一覧された Excel ブックを参照してください。
組み込みのタブにグループを追加するには、そのタブのマークアップを customUI.xml ファイルに追加します。customUI.xml ファイルでは、タグのマークアップの順序は問いませんが、新しいマークアップを適切に入れ子にすることだけに注意してください。たとえば、これをカスタム タブの後に配置する場合は、カスタム タブの終了タグの後になり、そのタグ グループの終了タグの前になる位置 (</tab> と </tabs> の間) に追加してください。次のコードでは、[Break Time] グループを [挿入] タブに追加しています。
<tab idMso="TabInsert">
<group id="customGroup2" label="Break
Time" insertAfterMso="GroupInsertTa
bles" >
  <button id="myBreak" visible="true"
  size="large" label="Take a Break" 
  imageMso="HappyFace"
  onAction="TakeABreak" />
</group>
</tab>
特別な要件があって特殊なテンプレートを作成し、ユーザーにカスタム コマンドのみを提供する必要がある場合は、そのテンプレート専用の完全に独自のリボンを作成することもできます。それには、次のように、customUI.xml でリボンの開始タグ (<ribbon> タグ) に startFromScratch="True" という属性を追加します。
<ribbon startFromScratch="true">
ボタン以外のカスタム コマンドを追加する場合も、構文は同じです。たとえば、分割ボタン メニューを追加する場合も、タグのペアと入れ子の規則に留意するだけで、このカスタマイズは非常に簡単に実現できます。これまで追加したすべてのコマンドを個別のボタンではなく、1 つの分割ボタン メニューにまとめたい場合は、次のコードを使用できます。
<splitButton id="customSplit1" visible="true"
size="large">
  <menu id="customMenu1" visible="true" >
    <button id="myBreak" visible="true"
    label="Take a Break" imageMso="HappyFace"
    onAction="TakeABreak" />
    <button idMso="PasteSpecialDialog"
    visible="true" imageMso="Paste" />
    <button idMso="CrossReferenceInsert"
    visible="true" label="Insert a 
    Cross-Reference" />
    <gallery idMso="QuickStylesGallery"
    visible="true" />
  </menu>
</splitButton>
この結果を図 5 に示します。このメニューの最初のボタン コマンドが、この分割ボタンの既定コマンドになります。HappyFace アイコンのコマンドを先頭に持ってきたのはそのためです。分割ボタンは、ボタン コントロールである必要があります。(ギャラリー コントロールを使用する) クイック スタイルを最初のコマンドにした場合、これは分割コントロールであるため既定のコマンドとして使用されず、メニュー内の最初のボタン コントロールが既定のコマンドとして使用されます。
図 5 単一の分割ボタン メニュー
以上は、UI のカスタマイズする方法の一例に過ぎません。カスタム イメージをコマンドに追加したり、VBA マクロを使用して一部のコマンドの動作を条件に応じて制御するなど、さらに高度なカスタマイズについては、さまざまな情報がオンラインで提供されています。MSDN の Office デベロッパー センターを参考にしてください。
リボンの動作を条件に応じて制御する方法についての情報が必要な場合は、getVisible 属性や getLabel 属性を取り上げているページを検索してください。'get' プレフィックスは、動作の指示がないかリボンがマクロを確認するように指定する (コールバックする) 場合に、既知の属性の前に使用します。

カスタムのリボンを共有する
UI のカスタマイズは、2007 Office system の Word、Excel、または PowerPoint のドキュメント、テンプレート、またはアドインに保存できます。カスタム UI をインストールして、どのドキュメントやテンプレートを使用していても、カスタム UI を使用できるようにしたい場合はどうでしょうか。これも、非常に簡単に実現できます。
Word では、マクロと関連するカスタム UI が含まれる .dotm ファイルを、Word スタートアップ フォルダに保存するだけで、Word の起動時に、このファイルが自動的に読み込まれるようになります。
Excel または PowerPoint では、マクロとカスタム UI 設定が含まれるファイルをアドインとして保存し、このアドインを読み込む必要があります。対応するプログラムでファイルを開き (マクロについてのメッセージが表示された場合はマクロを有効にします)、[名前を付けて保存] コマンドを使用して、アドインとしてファイルのコピーを保存します (Excel 2007 のアドインのファイル形式は .xlam、PowerPoint 2007 のアドインのファイル形式は .ppam です) 。この形式でファイルを保存すると、ファイルは自動的に Microsoft AddIns フォルダに保存されます。これを [<プログラム名> アドイン] ダイアログ ボックスから読み込みます。このダイアログ ボックスは、[<プログラム名> のオプション] の [アドイン] タブから表示します。アドインを初めて読み込むときは、マクロを有効にするかどうかを確認するメッセージが表示される場合があります。その場合は、[マクロを有効にする] をクリックします。これ以降は、プログラムを開くときに自動的に読み込まれるようになります。

Stephanie Krieger は Microsoft Office System の MVP であり、『Advanced Microsoft Office Documents 2007 Edition Inside Out』および『Microsoft Office Document Designer』の著者でもあります。また、マイクロソフト関連の執筆活動、プレゼンテーション、コンテンツ作成も頻繁に行っています。連絡先については、arouet.net を参照してください。

Page view tracker