コントロールの追加
カスタムリボンで使用可能なコントロールには、次のようなものがあります。
| コントロール | 説明 |
| Box | グループ内のコントロールを整理するコンテナ。区分線、グループ、タブを除き、任意のコントロールを追加できる。 |
| Button | アクションを起動するボタン。 |
| ButtonGroup | 1つ以上のボタン、トグル ボタン、メニュー、分割ボタン、ギャラリを含むグループ。 |
| CheckBox | オンまたはオフにしてオプションの有効/無効を切り換えるボックス。 |
| ComboBox | リスト ボックスが付属したエディット ボックス。 |
| DropDown | ユーザーが選択できる項目の一覧。ユーザーが新しい項目を入力することはできない。 |
| EditBox | ユーザーがテキストを入力できるボックス。 |
| Gallery | ユーザーが選択できる項目を配列やグリッドで視覚的に示すメニュー。 |
| Label | リボン上のコントロールの識別に使用できるテキスト。 |
| Menu | ドロップダウン リスト。 |
| Separator | 一覧内の項目を分割するために使用する細いバー。 |
| SplitButton | メニューが付属したボタン。 |
| ToggleButton | 押された状態または押されていない状態で表示されるボタン。 |
先ほど作成した「マイグループ」にDropDownコントロールを追加し、ユーザーが選択した項目をアクティブなセルへ入力してみたいと思います。
はじめに、ツールボックスの[Officeリボン コントロール]からDropDownコントロールを選択し「マイグループ」へドロップします。
追加されたDropDown1コントロールを選択し、プロパティウィンドウで次のように設定してください。
| Nameプロパティ | DropDownFruits |
| Labelプロパティ | フルーツ |

次に、DropDownFruitsへアイテムを追加したいと思います。
アイテムの追加は、DropDownのItemsプロパティでも設定可能ですが、今回はリボンがロードされたときに行ってみたいと思います。
- リボンデザイナで「MyRibbon1」と書かれたところをクリックする。
- プロパティウィンドウで「MyRibbon1」が選択されていることを確認し、イベント(カミナリマーク)ボタンを押す。
- Loadイベントをダブルクリックする。
下記のようにコードを入力してください。
Private Sub MyRibbon1_Load(ByVal sender As System.Object, _ ByVal e As RibbonUIEventArgs) Handles MyBase.Load Dim strFruits As String() = {"リンゴ", "バナナ", "ミカン"} For Each strFruit As String In strFruits 'アイテムの作成 Dim item As New RibbonDropDownItem item.Label = strFruit 'アイテムの追加 DropDownFruits.Items.Add(item) Next End Sub
private void MyRibbon1_Load(object sender, RibbonUIEventArgs e) { string[] strFruits = { "リンゴ", "ミカン", "バナナ" }; foreach (string strFruit in strFruits) { // アイテムの作成 RibbonDropDownItem item = new RibbonDropDownItem(); item.Label = strFruit; // アイテムの追加 dropDownFruits.Items.Add(item); } }
これでDropDownFruitsへアイテムを追加することができました。
次に、ユーザーが選択したアイテムをアクティブなセルへ入力してみたいと思います。
リボンデザイナへ戻って、
- DropDownFruitsを選択する
- プロパティウィンドウのイベント(カミナリマーク)ボタンを押す
- SelectionChangedイベントをダブルクリックする
下記のようにコードを入力してください。
Private Sub DropDownFruits_SelectionChanged( _ ByVal sender As System.Object, ByVal e As _ Microsoft.Office.Tools.Ribbon.RibbonControlEventArgs) Handles _ DropDownFruits.SelectionChanged 'アクティブなセルへ、ユーザーが選択したアイテムを入力 Globals.ThisWorkbook.Application.ActiveCell.Value2 = _ DropDownFruits.SelectedItem.Label End Sub
private void dropDownFruits_SelectionChanged( object sender, RibbonControlEventArgs e) { // アクティブなセルへ、ユーザーが選択したアイテムを入力 Globals.ThisWorkbook.Application.ActiveCell.Value2 = dropDownFruits.SelectedItem.Label; }
少しコードの説明をします。
ロードイベントでは、リンゴ、バナナ、ミカンの文字列が入った配列変数を作成し For Eachで取り出しながら、DropDownコントロールへ追加しています。
DropDownコントロールへのアイテムの追加はItemsプロパティのAddメソッドで行います。
次に、アイテム選択時の処理ですが、DropDownのSelectionChangeイベントを使用しました。SelectionChangeイベントは、DropDownに表示されたアイテムの選択変更時に発生します。
アクティブセルの取得はGlobalsクラスを使用して取得しています。Globalsクラスはプロジェクト内の項目への参照を保持する静的クラスで、VSTO開発を行う上で欠かせないものです。Globalsクラスを使用することで、プロジェクト内のWorkbook、Worksheetなどへのアクセスが可能です。
アクティブなセルは
Globals.ThisWorkbook.Application.ActiveCell
で取得可能で、値を設定するには
Globals.ThisWorkbook.Application.ActiveCell.Value2
プロパティに対して行います。
まとめ
今回はVisual Studio 2008 VSTOを使用してExcel2007へカスタムリボンを追加する方法について説明しました。簡単にカスタムリボンを作成できることを実感いただけたかと思います。
次回はカスタムリボンのタブコントロール、グループコントロール、Officeボタンの操作方法について説明したいと思います。
