2014/02/22

リボンメニューのドロップダウンリストを VBA/マクロから使用する方法


リボンメニューのドロップダウンリストの VBA/マクロからの使用方法は、ネットにあまりありません。特に、デフォルト設定を行う方法はなかなかないので、その方法も含めてご紹介します。

なお、ドロップダウンリストとコンボボックスの違いは、ドロップダウンリストは選択のみで、コンボボックスはテキストの入力もできるところにあります。

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

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

<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
<ribbon startFromScratch="false">
  <tabs>
   <tab id="customTab" label="サンプル">
    <group id="grp1" label="グループ">
     <dropDown id="ddl1" getSelectedItemID="dropDown_getSelectedItemID" onAction="dropDown_onAction" label="ドロップダウンリスト">
      <item id="item1" label="リスト1"/>
      <item id="item2" label="リスト2"/>
      <item id="item3" label="リスト3"/>
     </dropDown>
     <button id="btn1" imageMso="AnimationStartDropdown"  size="large" label="実行" onAction="Submit" />
    </group>
   </tab>
  </tabs>
</ribbon>
</customUI>

Excel 2010 では、以下のように表示されます(後述する VBA でデフォルト設定がされている)。

pic01

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

これは、ドロップダウンリストの変更時にその内容を変数に格納しておく必要があるということになります。

なお、getSelectedItemID イベントを利用することで、ドロップダウンリストの初期値を設定することができます。

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

'ドロップダウンリストの値を格納する変数
Dim dropDown1 As String
Dim dropDown1Idex As Integer

'起動時処理
Sub Auto_Open()
'デフォルト値設定
dropDown1 = "item2"
dropDown1Idex = 1
End Sub

'ドロップダウンリストにデフォルト値を設定
Sub dropDown_getSelectedItemID(control As IRibbonControl, ByRef itemId As Variant)
  itemId = dropDown1
End Sub

'ドロップダウンリストの変更内容を保存
Sub dropDown_onAction(control As IRibbonControl, id As String, index As Integer)
  If control.id = "ddl1" Then
    dropDown1 = id
    dropDown1Idex = index
  End If
End Sub

'ドロップダウンリストの内容を書き出し
Sub Submit(control As IRibbonControl)
  Cells(1, 1).value = "ID = " & dropDown1
  Cells(2, 1).value = "Index = " & dropDown1Idex
End Sub

この VBA の実行結果は、以下のようになります。

pic02


スポンサーリンク


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




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


コメント

コメントを書く



プロフィール

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

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


    ブログについて

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

    現在、Enty で支援を受け付けています。もしよければご支援ください。



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

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