2012年8月25日土曜日

Word でキーボードショートカットキーを一括して登録する

【まえがき】

Word には、キーボードショートカットキーの割り当てを、デフォルト設定(Ctrl+Sが「上書き保存」など)も含め自由にカスタマイズできるようになっているのですが、
その設定方法が、Office2010を例にとると、

[ファイル] → [オプション] → [リボンのユーザー設定] → ショートカットキー:[ユーザー設定]を選択

と設定画面を開くだけでもめんどくさいです。
おまけに、設定画面も小さく、1つ1つ手作業でショートカットキーを登録するのは、苦痛以外の何物でもありません。私的に。
ショートカットキーの設定画面
もっとも、ショートカットキーを1個、2個登録するだけであれば、気にならないかもしれないのですが、普段使っているPCとは、別のPCでショートカットキーの設定を再現しようとして

  1. 普段使っているPCの設定を確認して
  2. 小さな画面で 1個1個設定する

という作業をしていたら、発狂しかけました。
将来OSを入れ替えた時など『忘れた頃にまたしなければならないのか』と思うと、絶望のあまり倒れてしまいそうなので、VBAでショートカットキーを一括して登録するコードを書いてみました。

【書いたコード】


配列 (macroSetting, commandSetting)に、
  • 実行するマクロ/コマンド名
  • 割り当てるショートカットキー
の順で、ショートカットキーの設定 (詳しくは後述)をまとめて格納した後、KeyBindings.Add()メソッド を用いてショートカットキーを登録しています。

ショートカットキーにマクロを割り当てる場合と、「上書き保存」など標準で組み込まれているコマンド (fixed command) を割り当てる場合とではAdd() メソッドの引数が変わるので、それぞれ設定を格納する配列を分けています。

点線より上側に、ショートカットキーの設定を書き並べれば使えるので、
ショートカットキーの設定を確認するのも楽かなと思ってこんな風に書いてみました。

なお、配列の末尾の要素の "***END***"は、単に、各行の書式を揃えてコピペし易くする (全行が","で終わるようにする)ためだけに挿入しています。

【ショートカットキーの設定について】

ショートカットキーの設定に用いるキーの定数一覧は、MSDNの
に記載されています。ただ、自分が確認した範囲では、日本語キーボードの場合
  • wdKeySemiColon は、": "(コロン)のキーに
  • wdKeyEquals は、 ";"(セミコロン)のキーに
相当しています。たとえば、Ctrl + ":" にマクロを割り当てたい場合、『wdKeyControl + wdKeySemiColon』を使う必要があります。(英語キーボードを想定して、定数が決め打ちされているのでしょうか…。)

また、複合キーの設定は、BuildKeyCode() メソッドを用いて BuildKeyCode(wdKeyControl, wdKeySemiColon) のように書けるのですが、冗長なだけなので上記コードでは直接加算しています。

標準で組み込まれているコマンド (fixed command)名については、MSDNの
に記載されています。

【どうでもいい話】

過去に、無意識に Ctrl +S を押して、書き損じた文書を上書き保存してしまうという失敗をしたことがあったので、
Ctrl + Sには、「名前をつけて保存」を割り当てて、意図的に、ファイルの保存ダイアログが出るように(一旦、本当に保存していいか確認できるように)しています。

まぁ、自動でバックアップとるなり、差分管理しておけよって感じではあるのですが…。