2014/02/22

リボンメニューのチェックボックスを VBA/マクロで使用する方法


リボンメニューのチェックボックスを VBA/マクロで利用する方法が意外とネット上にないのですよね。方法を知らないと手こずることになるので、その方法をご紹介します。

なお、動作検証は、Excel 2010 で行っています。

まず、リボンメニューの定義をします。リボンメニューの定義方法は以下の記事を参考にしてください。

リボンメニューの定義は以下のようになります。

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
  <tabs>
   <tab id="customTab" label="サンプル">
    <group id="grp1" label="グループ">
      <checkBox id="chk1" getPressed="checkBox_getPressed" onAction="checkBox_change" label="チェックボックス1"/>
      <checkBox id="chk2" getPressed="checkBox_getPressed" onAction="checkBox_change" label="チェックボックス2"/>
      <checkBox id="chk3" getPressed="checkBox_getPressed" onAction="checkBox_change" label="チェックボックス3"/>
      <button id="btn1" imageMso="AnimationStartDropdown"  size="large" label="実行" onAction="Submit" />
    </group>
   </tab>
  </tabs>
</ribbon>
</customUI>

これを Excel で表示すると、以下のようになります。

pic01

リボンメニューの VBA アプリケーションで重要なことは、VBA からリボンメニューのコントロールの値に「直接」アクセスすることができないということです。コントロールの値は、リボンメニューから VBA に変数を経由して渡されるのが基本です。

これは非常に面倒な仕様で、リボンメニューに表示している値を、コントロールのイベント発生時に変数に格納しておく必要があることを意味します。

ただし、リボンメニューのコントロールの初期値の設定は可能です。チェックボックスであれば、getPressed イベントに対応する VBA コードを以下のように記述すれば初期値を設定することが可能です。

Sub checkBox_getPressed(control As IRibbonControl, ByRef returnValue)
  returnValue = True
End Sub

これを踏まえた VBA のコードは以下のようになります。

'チェックボックスの値を格納する変数宣言
Dim IsCheckBox1 As Boolean
Dim IsCheckBox2 As Boolean
Dim IsCheckBox3 As Boolean

'起動時処理
Sub Auto_Open()
  'デフォルト値設定
  IsCheckBox1 = True
  IsCheckBox2 = False
  IsCheckBox3 = False
End Sub

'チェックボックスにデフォルト値を設定
Sub checkBox_getPressed(control As IRibbonControl, ByRef returnValue)
  Select Case control.ID
    Case "chk1"
      returnValue = IsCheckBox1
     Case "chk2"
      returnValue = IsCheckBox2
    Case "chk3"
      returnValue = IsCheckBox3
  End Select
End Sub

'チェックボックスの値を格納
Sub checkBox_change(control As IRibbonControl, ByRef returnValue)
  Select Case control.ID
    Case "chk1"
      IsCheckBox1 = returnValue
     Case "chk2"
      IsCheckBox2 = returnValue
    Case "chk3"
      IsCheckBox3 = returnValue
  End Select
End Sub

'チェックボックスの値をセルに書き出し
Sub Submit(control As IRibbonControl)
  Cells(1, 1).value = "チェックボックス1=" & IsCheckBox1
  Cells(2, 1).value = "チェックボックス2=" & IsCheckBox2
  Cells(3, 1).value = "チェックボックス3=" & IsCheckBox3
End Sub

実行ボタンをクリックした際の結果は以下のようになります。設定通りの内容が出力されていますね。

pic02

リボンメニューのチェックボックスを VBA で使用する方法を見てきましたが、いかがだったでしょうか。意外にコーディング量が多いと思ったかもしれません。

ですが、慣れれば問題ない内容でもあるので、慣れていきましょう。


スポンサーリンク


このエントリーをはてなブックマークに追加




Twitter ではブログにはない、いろんな情報を発信しています。


コメント

コメントを書く



プロフィール

  • 名前:fnya
    経歴:
    SE としての経験は15年以上。様々な言語と環境で業務系システム開発を行い、セキュリティ対策などもしていました。現在は趣味SE。

    Twitter では、ブログでは取り上げない情報も公開しています。


    ブログについて

    このブログは、IT、スマートフォン、タブレット、システム開発などに関するさまざまな話題を取り上げたり、雑感などをつづっています。

    >>ブログ詳細
    >>自作ツール
    >>運営サイト
    >>Windows 10 まとめ

    Twitter のフォローはこちらから Facebook ページはこちら Google+ページはこちら RSSフィードのご登録はこちらから