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="グループ">
     <toggleButton id="tgl1" getPressed="toggleButton_getPressed" onAction="toggleButton_onAction" label="選択肢1"/>
     <toggleButton id="tgl2" getPressed="toggleButton_getPressed" onAction="toggleButton_onAction" label="選択肢2"/>
     <toggleButton id="tgl3" getPressed="toggleButton_getPressed" onAction="toggleButton_onAction" label="選択肢3"/>

     <button id="btn1" imageMso="AnimationStartDropdown"  size="large" label="実行" onAction="Submit" />
    </group>
   </tab>
  </tabs>
</ribbon>
</customUI>

このリボンメニューを、Excel 2010 で表示すると以下のようになります。「選択肢1」が既に ON になっているのは、後述するデフォルト設定を行っているためです。

pic01

他の記事でも書きましたが、リボンメニューのコントロールの値には、VBA からは「直接」アクセスすることはできません。コントロールの値にアクセスするには、リボンメニューのイベントで呼び出されるメソッドの変数を経由する必要があります。

これは、トグルボタンの変更時にその内容を変数に格納しておく必要があるということになります。

なお、getPressed イベントを利用することで、トグルボタンの初期値を設定することができます。

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

'トグルボタンの値を格納する変数
Dim toggleButton1 As Boolean
Dim toggleButton2 As Boolean
Dim toggleButton3 As Boolean

'起動時処理
Sub Auto_Open()
'デフォルト値設定
toggleButton1 = True
toggleButton2 = False
toggleButton3 = False
End Sub

'トグルボタン値を設定
Sub toggleButton_getPressed(control As IRibbonControl, ByRef returnValue)
  Select Case control.id
    Case "tgl1"
      returnValue = toggleButton1
    Case "tgl2"
      returnValue = toggleButton2
    Case "tgl3"
      returnValue = toggleButton3
  End Select
End Sub

'トグルボタンの変更内容を保存
Sub toggleButton_onAction(control As IRibbonControl, pressed As Boolean)
  Select Case control.id
    Case "tgl1"
      toggleButton1 = pressed
    Case "tgl2"
      toggleButton2 = pressed
    Case "tgl3"
      toggleButton3 = pressed
  End Select
End Sub

'トグルボタンの内容を書き出し
Sub Submit(control As IRibbonControl)
  Cells(1, 1).value = "選択肢1=" & toggleButton1
  Cells(2, 1).value = "選択肢2=" & toggleButton2
  Cells(3, 1).value = "選択肢3=" & toggleButton3
End Sub

実行ボタンを押した結果は以下のようになります。正しくトグルボタンの内容を出力していることが分かります。

pic02


スポンサーリンク


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




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


コメント

コメントを書く



プロフィール

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

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


    ブログについて

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


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

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