none
リボン上のgalleryのメニューアイテムにショートカットキーを割り当てる方法を教えてください RRS feed

  • 質問

  • 会社の規約によりWord2007を使用しています。

    さて、自分のレガシーのプログラムをリボンから起動出来るようにするため、色々と調べて取りあえずWordドキュメントをzip解凍したcustomUIフォルダ内のcustomUI.xmlに必要なタグを埋め込んでメニューツリーを作り、マクロに割り当てて動かすところまで出来ました。

    マクロ化したコマンドは沢山あるので、階層的に実行できるようにカスタムgalleryを作成して、その下にitemを紐付け用としています。

    例えば段落に見出しヘッダーを設定するためのギャラリーコントロールをカスタムリボンに設定して、そのギャラリーをkeytip="H"とかで実行したときにドロップダウンで表示されるitemを、同じくショートカットキーで選択させたいと思っています。

    <gallery id="cmbHeadings" label="見出しヘッダーの設定" keytip="H" onAction="SetHeadings" >
        <item id="Heading1" label="見出し1" />
        <item id="Heading2" label="見出し2" />
        ・・・・

    のような感じです。

    このときギャラリーの下にある<item>に対するショートカットキーの設定がなにやら上手くいきません。

    label="見出し&1"のようにやると決められた手順で圧縮して名前を元のマクロつきドキュメントに戻して開こうとするとエラーになってしまいます。

    ----------------

    しかしながらWordネイティブのリボン状のメニューにはギャラリーアイテムにショートカットが付いているものが多々あるので、これは絶対に実行可能だと思います。どなたかやり方をご存知の方、ご教授の方宜しくお願いいたします。


    2014年10月27日 7:55

回答

  • こんにちは。

    > このときギャラリーの下にある<item>に対するショートカットキーの設定がなにやら上手くいきません。

    item要素にこだわりが無ければ、button要素で処理してみてはいかがでしょうか。

    ・リボンXML

    <?xml version="1.0" encoding="utf-8"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
      <ribbon>
        <tabs>
          <tab id="tabSample" label="Sample Tab">
            <group id="grpSample" label="Sample Group">
              <gallery id="glySample" label="Sample Gallery" keytip="H" onAction="glySample_onAction">
                <!-- item要素にlabel属性でアクセス キーを設定しても効果なし -->
                <item id="itmSample1" label="Item 1(&amp;A)" />
                <item id="itmSample2" label="Item 2(&amp;B)" />
                <item id="itmSample3" label="Item 3(&amp;C)" />
                <item id="itmSample4" label="Item 4(&amp;D)" />
                <button id="btnSample1" label="Button 1(&amp;E)" tag="Tag1" onAction="btnSample_onAction" />
                <button id="btnSample2" label="Button 2(&amp;F)" tag="Tag2" onAction="btnSample_onAction" />
                <button id="btnSample3" label="Button 3(&amp;G)" tag="Tag3" onAction="btnSample_onAction" />
                <button id="btnSample4" label="Button 4(&amp;H)" tag="Tag4" onAction="btnSample_onAction" />
              </gallery>
            </group>
          </tab>
        </tabs>
      </ribbon>
    </customUI>



    ・標準モジュール

    Option Explicit
    
    Public Sub btnSample_onAction(control As IRibbonControl)
      MsgBox control.id & vbCrLf & control.Tag
    End Sub
    
    Public Sub glySample_onAction(control As IRibbonControl, id As String, index As Integer)
      MsgBox control.id & vbCrLf & id & vbCrLf & index
    End Sub


    > label="見出し&1"のようにやると決められた手順で圧縮して名前を元のマクロつきドキュメントに戻して開こうとするとエラーになってしまいます。

    もし「&」をエンティティ参照( http://msdn.microsoft.com/ja-jp/library/ms256190.aspx )に置き換えていないのであれば、「&amp;」のようにする必要があります。
    2014年10月28日 1:46

すべての返信

  • こんにちは。

    > このときギャラリーの下にある<item>に対するショートカットキーの設定がなにやら上手くいきません。

    item要素にこだわりが無ければ、button要素で処理してみてはいかがでしょうか。

    ・リボンXML

    <?xml version="1.0" encoding="utf-8"?>
    <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui">
      <ribbon>
        <tabs>
          <tab id="tabSample" label="Sample Tab">
            <group id="grpSample" label="Sample Group">
              <gallery id="glySample" label="Sample Gallery" keytip="H" onAction="glySample_onAction">
                <!-- item要素にlabel属性でアクセス キーを設定しても効果なし -->
                <item id="itmSample1" label="Item 1(&amp;A)" />
                <item id="itmSample2" label="Item 2(&amp;B)" />
                <item id="itmSample3" label="Item 3(&amp;C)" />
                <item id="itmSample4" label="Item 4(&amp;D)" />
                <button id="btnSample1" label="Button 1(&amp;E)" tag="Tag1" onAction="btnSample_onAction" />
                <button id="btnSample2" label="Button 2(&amp;F)" tag="Tag2" onAction="btnSample_onAction" />
                <button id="btnSample3" label="Button 3(&amp;G)" tag="Tag3" onAction="btnSample_onAction" />
                <button id="btnSample4" label="Button 4(&amp;H)" tag="Tag4" onAction="btnSample_onAction" />
              </gallery>
            </group>
          </tab>
        </tabs>
      </ribbon>
    </customUI>



    ・標準モジュール

    Option Explicit
    
    Public Sub btnSample_onAction(control As IRibbonControl)
      MsgBox control.id & vbCrLf & control.Tag
    End Sub
    
    Public Sub glySample_onAction(control As IRibbonControl, id As String, index As Integer)
      MsgBox control.id & vbCrLf & id & vbCrLf & index
    End Sub


    > label="見出し&1"のようにやると決められた手順で圧縮して名前を元のマクロつきドキュメントに戻して開こうとするとエラーになってしまいます。

    もし「&」をエンティティ参照( http://msdn.microsoft.com/ja-jp/library/ms256190.aspx )に置き換えていないのであれば、「&amp;」のようにする必要があります。
    2014年10月28日 1:46

  • きぬあさ様、お返事有り難うございました。一発で上手くいきました!!

    やはりボタンじゃないとアクセラレータキーは使用できないのですね。

    ちょっとがっかりだったのですが、見た目はボタンでやるのも変わらないのでこれで行きます。
    ただしマクロを個々のボタンにOnActionで割り当てていかなければいけないのがちょっと難点ですね。

    アクセラレータキーの「&」をエンティティ参照するのですね!
    これは試してませんでしたがやはりそうだったのか!という感じです。

    細かいことですがこういった情報がとっても僕らにとっては重要かつ有りがたいです。

    以上、本当に助かりました。心よりお礼申し上げます。





    2014年10月30日 8:57