リボンのカスタマイズ


Office2007から、メニューがなくなり、代わりにリボンが導入されました。
これまで独自に作成したメニューは、アドインというタブにまとめて表示されます。

そこで、Office2007以降のリボンのカスタマイズ方法を紹介します。

ここでは、Office 2007のExcelを使用して、リボンにボタンを追加する方法を説明します。
また、今回の方法は、そのままPower Pointでも使用できる内容になっています。
なお、ここで作成するアドインは、Office2010のExcelおよびPower Pointで動作することを確認しています。

いろんなサイトでリボンのカスタマイズ方法を紹介していますが、大抵が別のソフトウェアをインストールすることが前提になっています。今回はソフトウェアをインストールせずにリボンをカスタマイズします。


今回、参考にしたサイトはこちらです。
エクセル研究室 リボンのカスタイマイズ方法
Office 2007/2010・リボンのカスタマイズ 初心者備忘録 Custom UI Editor Toolの弱点


前提条件
Excel 2007, 2010
PowerPoint 2007, 2010




カスタマイズしたリボンの大まかな仕様
・Excelのリボンにボタンを追加する。
・ボタンの画像は、特定のフォルダに配置した画像を使用する。
・ボタンをクリックすると、特定のフォルダに配置した画像をクリップボードへコピーする。


1.リボンのUI設定
ここでは、リボンのUIを設定します。設定にはXMLを使用します。


はじめに、Excelを起動して、マクロ有効ブック(XLSM)ファイル(以降、TestRBN.xlsm)を作成してください。
次に、作成したTestRBN.xlsmをzipファイルとしてリネームします。(TestRBN.xlsm -> TestRBN.xlsm.zip)

リネーム
(TestRBN.xlsm -> TestRBN.xlsm.zip)

なお、zipファイルを開くと以下の構成になります。

TestRBN.xlsm.zipのファイル構成

Office2007以降のファイルフォーマットは、Office Open XML形式を採用しており、XMLで記述した文書と画像などのバイナリ情報をZIPでパッケージングするようになりました。

参考サイト
http://www.atmarkit.co.jp/fwin2k/operation/office2007format/office2007format_01.html
http://mitsutakauomi.com/?p=362
http://sevenzip.sourceforge.jp/howto/xlsx-pptx-re-compress.html


さて、これで準備が整いました。次は、いよいよUIの設定作業になります。
UIの設定では、以下の2つを行います。
  • /_rels/.rels ファイルの修正
  • customUIファイルの追加

1-1./_rels/.rels ファイルの修正

「TestRBN.xlsm.zip」の「_rels」フォルダにある、.relsファイルを適当なフォルダへドロップします。

.relsファイルの取得

ドロップしたファイルをテキストエディタで開き、以下の場所にXMLを追記します。

追加するXML
<Relationship Id="customUIRelID" Type="http://schemas.microsoft.com/office/2006/relationships/ui/extensibility" Target="/customUI/customUI.xml" />

.relsファイルの修正

「TestRBN.xlsm.zip」の元のフォルダへ配置して上書きします。

.relsファイルの配置(上書き)

1-2.customUIファイルの追加

リボンをカスタマイズするUI設定を記述したXMLファイルを作成します。
ここではXMLファイルの名前を「customUI.xml」とします。
(上記.relsのTarget属性に記述したxmlの名前で作成します。)

customUI.xml


customUI.xmlの中身は以下の通り。

<?xml version="1.0" encoding="utf-8"?>
<customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
  <ribbon>
    <tabs>
      <tab id="hogeID" label="テストタブ">
        <group id="TestGroupId" label="画像のコピー">
          <button id="Button1" size="large" label="夏目漱石" getImage="Button_GetImage" onAction="TestCopyImage" />
       </group>
     </tab>
    </tabs>
  </ribbon>
</customUI>


今回はボタンのため、Buttonタグを追加しました。各属性については、以下の通り。
  • ID属性
    •  グループタグ内で一意の文字列を表します。
  • size属性
    •  ボタンのサイズを表します。(largeは大きいボタン、normalは小さいボタン)
  • label属性
    •  ボタンのラベルを表します。
  • getImage属性
    •  ボタンの画像を設定するコールバック関数です。詳細は後ほど記述します。
  • onAction属性
    • ボタンクリック後に実行する関数です。詳細は後ほど記述します。
なお、XMLファイルを保存するときは、日本語の文字化けを回避するため、文字コードを「UTF-8」、改行は「CR+LF」にしてください。


 次に、「customUI.xml」を配置したcustomUIフォルダを「TestRBN.xlsm.zip」のルート上に配置します。

customUIフォルダの配置

 最後に、リネームした「TestRBN.xlsm.zip」を元の名前「TestRBN.xlsm」に戻します。

リネーム
(TestRBN.xlsm <- TestRBN.xlsm.zip)

 以上でリボンのUI設定は完了です。


2.マクロの追加

「TestRBN.xlsm」をExcelで開いて、VBE(Visual Basic Editor)を開きます。
モジュールに以下の関数を追加します。

Visual Basic Editor

Option Explicit

Private Const C_NAME_RIBBON_IMAGE_32 As String = "1000yen_32.bmp"
Private Const C_NAME_COPY_FILE       As String = "1000yen.bmp"
Private Const C_FOLDER_NAME_IMAGE    As String = "img"
Private Const C_ADDIN_NAME           As String = "TestRBN"

Public Sub Button_GetImage(control As IRibbonControl, ByRef image)

  Dim addinPath As String
  addinPath = Application.AddIns(C_ADDIN_NAME).path

  Select Case control.Id
    Case Is = "Button1"
      Set image = LoadPicture(addinPath & "\" & C_FOLDER_NAME_IMAGE & "\" & C_NAME_RIBBON_IMAGE_32)
  End Select

End Sub

Public Sub TestCopyImage(control As IRibbonControl)

    Dim AP As Object
    Dim WB As Object
    Dim WS As Object
    Dim SP As Object

    Dim fldrPath As String
    Dim filePath As String

    fldrPath = Application.AddIns(C_ADDIN_NAME).path & "\" & C_FOLDER_NAME_IMAGE
    filePath = fldrPath & "\" & C_NAME_COPY_FILE

    Set AP = CreateObject("Excel.Application")
    Set WB = AP.Workbooks.Add
    Set WS = WB.Worksheets(1)
    Set SP = WS.Shapes.AddPicture(filePath, True, True, 0, 0, 0, 0)

    SP.ScaleHeight 1, msoTrue
    SP.ScaleWidth 1, msoTrue

    SP.Copy

    WB.Close SaveChanges:=False

    Set SP = Nothing
    Set WS = Nothing
    Set WB = Nothing
    Set AP = Nothing

End Sub

【補足】
セパレータがバックスラッシュになっていますが、コピペすれば円マークになります。(汗)

Button_GetImage関数は、リボンのボタンの画像を設定するときに呼ばれるコールバック関数です。
この関数では、Addinフォルダにある画像ファイル(/img/1000yen_32.bmp)を読み込みます。

TestCopyImage関数は、リボンのボタンが押下されたときに呼ばれる関数です。
 この関数では、Addinフォルダにある画像ファイル(img/1000yen.bmp)をクリップボードへコピーします。


次に、Excelアドイン形式(.xlam)で保存します。
保存場所はAddinフォルダです。
Excelアドイン形式(xlamx)
<Addinフォルダパス>
C:\Users\ユーザ名\AppData\Roaming\Microsoft\AddIns


次に、ボタン画像を配置します。
ここでは、アドインファイルを配置したAddinフォルダに以下のファイルを配置します。

画像ファイル
配置するフォルダおよび画像ファイル
/img
/img/1000yen.bmp   ← クリップボードへコピーする画像
/img/1000yen_32.bmp ← リボンのボタン画像

ボタン画像の大きさは、size属性がlargeの場合32×32、normalの場合16×16がよいです。

以上でリボンのカスタマイズは完了です。


完成
最後に、Excelのオプションから、作成したTestrbnアドインを有効にすれば、カスタマイズしたリボンが表示されます。

Excelアドインのリボン

なお、今回のリボンのカスタマイズは、PowerPointでも、同じUI設定およびマクロでアドインを開発することができます。

Power Pointアドインのリボン

その他
いまさらですが、千円札は野口英夫でしたね。
夏目漱石を野口英夫に直すのがめんどくさいのでこのままにしておきます。
あしからず。。。

以上

0 件のコメント:

コメントを投稿

最新

【PHP】スーパーグローバル変数 $_GET $_POST $_REQUEST

スーパーグローバル変数 $_REQUESTは、HTTPメソッドがGETとPOSTのいずれの場合もデータを取得することができる。 $_REQUEST['xxx'] $_GET['xxx'] $_POST['xxx'] ...