Excelでマクロ記録できないコマンドにショートカットキーを割り当てる

先日の以下の記事でも書いたけど、最近excelの自作ショートカット作成に凝っている。
atz.hatenadiary.com

登録したいコマンドをマクロ記録しては、その内容をアドインファイルに追記する作業をしていた。
ところが一部マクロ記録できないコマンドが出てきた。
具体的には「オブジェクトの選択」「横書きテキストボックス ボックスの描画」等である。

使用頻度の低いコマンドであれば無視できるが、普段の業務で使うし是非ともショートカットキーを割り当てたい。。

そこでまず試したのが、sendkeysでAltキー+複数キーを送る方法。
結論から言うとこの方法はNG。sendkeysがそもそも動作が安定しないらしい。
「オブジェクトの選択」であれば、以下のようなコードを書いた。

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub select()
 SendKeys "%", True
 Sleep (1000)
 SendKeys "HFDO", True
End Sub

マクロ実行前に事前にaltキー→escキーを押しておくと問題ないのだが、事前処理なしに実行すると単純にセルに"HFDO"が入力される。
原因は不明のまま。


そこで次にトライしたのが、CommandBarsオブジェクトのExecuteMsoメソッドを使う方法。
sendkeysよりも簡単かつ、確実なためこちらが正解。
マクロも以下の通りシンプル。

Sub ObjectsSelect()
Application.CommandBars.ExecuteMso "ObjectsSelect"
End Sub

ここで"ObjectsSelect"がコントロールIDでこれにより「オブジェクトの選択」ボタンをクリックしたとき同じ操作が可能となる。
詳細は以下のドキュメントを参照
docs.microsoft.com


なお各コマンドのコントロールIDの確認方法は以下のブログを参考にさせていただいた。
マクロで実行したいコマンドのIDを調べる簡単な方法 | 初心者備忘録