「既存の機能の代わりにマクロを実行する」の関連になりますが、Officeに元々備わっている機能の代わりに自作のマクロを動作させる方法を色々とまとめてみました。
■ コマンドバーのイベントを使用する方法
「コマンド バーのイベントを使用する」にも記載されていますが、クラスモジュールにWithEventsキーワードを使用してオブジェクト変数を宣言することで、既存の機能(イベント)を差し替えることができます。
[ThisDocument(Word)]
Option Explicit Private WithEvents btnFileOpen As Office.CommandBarButton Private Sub Document_Open() Set btnFileOpen = Application.CommandBars.FindControl(ID:=23) End Sub Private Sub btnFileOpen_Click(ByVal Ctrl As Office.CommandBarButton, CancelDefault As Boolean) If MsgBox("本当に開きますか?", vbYesNo) = vbNo Then CancelDefault = True End Sub
ただし、この方法はリボンUIになったOffice 2007以降では使えない場合が多々あるので、その場合は次に説明する”リボンをカスタマイズする方法“を使用することになります。
■ リボンをカスタマイズする方法
「既存の機能の代わりにマクロを実行する」で説明している通りですが、リボンをカスタマイズしてcommand要素のonAction属性を指定することで、既存の機能の代わりにマクロを実行することができます。
[標準モジュール]
Option Explicit Private Sub FileOpen_onAction(control As IRibbonControl, ByRef cancelDefault) If MsgBox("本当に開きますか?", vbYesNo) = vbYes Then cancelDefault = False End Sub
[リボンXML]
<?xml version="1.0" encoding="utf-8"?> <customUI xmlns="http://schemas.microsoft.com/office/2006/01/customui"> <commands> <command idMso="FileOpen" onAction="FileOpen_onAction" /> </commands> </customUI>
■ コマンドマクロを差し替える方法(Word)
Word限定の方法になりますが、Wordに元々備わっているコマンドマクロと同名のプロシージャ―を用意することで機能を差し替えることができます。
[標準モジュール]
Option Explicit Public Sub FileOpen() If MsgBox("本当に開きますか?", vbYesNo) = vbYes Then Application.Dialogs(wdDialogFileOpen).Show End Sub
上記コードを標準モジュールに記述すると、「開く」コマンドを実行する際、元々のファイルを開くコマンドマクロ「FileOpen」の代わりに上記の処理が実行されます。
この方法は「イベントを使用して Microsoft Word を制御する(組み込みルーチンを置き換える)」にも書かれている方法で、すべての機能を差し替えることができるわけではありませんが、知っていると便利な方法です。
コマンドマクロの名前に関しては下記Webページにある一覧が参考になります。
・Wordの「コマンドマクロ」一覧
http://www.tanimoto.to/comp/WordCommandMacrosList.html
・コマンドマクロ一覧(Word 2013 Customer Preview)
//www.ka-net.org/blog/?p=2194
・コマンドマクロ一覧(Word 2013)
//www.ka-net.org/blog/?p=3746
上記のように、既存の機能の代わりにマクロを実行する方法は色々ありますので、それぞれ必要に応じて使い分けるのが良いだろうと思います。
この記事へのコメントはありません。