Access 2010 ランタイム版でレポートプレビューのショートカットメニューを表示する

Access 2010で作ったシステムをランタイム版で動かすということがよくあるのですが、通常版とランタイム版で微妙に動作が違ったりすることがあります。

 

たとえばレポートのプレビュー画面上で右クリックしてもショートカットメニューが表示されません。

 

画面上部のリボンメニューを使えばいいじゃないかと思われるかもしれませんが、レポートをポップアップ表示にしているとこれも使えないんですね。

 

ではどうすればいいかというと、自前のメニューを作ってあげれば出来ます。

 

 

 

作り方はとても簡単です。

 

VBAでちょっとコードを書いてあげるだけです。

 

 

まずVBEで、Microsoft Office 14.0 Object Library への参照を設定してください。

 

次に、標準モジュールに以下のようなプロシージャを作ってください。

 

Public Sub CreateReportShortcutMenu()

    Dim cmbRightClick As Office.CommandBar
    Dim cmbControl As Office.CommandBarControl
 
    Set cmbRightClick = CommandBars.Add("cmdReportRightClick", msoBarPopup, False, True)
 
    With cmbRightClick
         
        '印刷
        Set cmbControl = .Controls.Add(msoControlButton, 2521, , , True)
        cmbControl.Caption = "即印刷"
         
        '印刷
        Set cmbControl = .Controls.Add(msoControlButton, 15948, , , True)
        cmbControl.Caption = "印刷"
         
        'ページ設定
        Set cmbControl = .Controls.Add(msoControlButton, 247, , , True)
        cmbControl.Caption = "ページ設定"
         
        'メールで送る
        Set cmbControl = .Controls.Add(msoControlButton, 2188, , , True)
        '新しいグループ開始
        cmbControl.BeginGroup = True
        cmbControl.Caption = "メールで送る"
         
        'PDFまたはXPS
        Set cmbControl = .Controls.Add(msoControlButton, 12499, , , True)
        cmbControl.Caption = "PDFまたはXPSとして出力"
         
        '閉じる
        Set cmbControl = .Controls.Add(msoControlButton, 923, , , True)
        '新しいグループ開始
        cmbControl.BeginGroup = True
        cmbControl.Caption = "閉じる"

    End With
     
    Set cmbControl = Nothing
    Set cmbRightClick = Nothing
    
End Sub

ここでは、CommandBarオブジェクトのAddメソッドを使って、

"cmdReportRightClick"という名前のショートカットメニューを作成しています。

 

ちなみに、ソースコードの中にあるそれぞれメニューごとに振ってある2521とか247といった数字はCommandBarControlのIDでメニューごとに決められています。

 

このID値はなぜかマイクロソフトで公開されてなくて探すのに苦労したのですが、以下のサイトで一覧を公開されててとても助かりました。

Office 2007/2010・リボンのカスタマイズ 初心者備忘録

 

 

次にこのショートカットメニューをレポートに割り当てます。

レポートプロパティのショートカットメニューバーに[cmdReportRightClick]を設定します。

 

 

あとは、このプロシージャをプログラム起動時に呼び出してあげればOKです。

 

実行するとこんな感じになります。