のにっき

【VBA】ショートカットキー設定時の注意

こんにちは。
今回は、Excelの自作関数にショートカットキーを設定する際、
適当にやって躓いてしまった事を書いていきます。

ショートカットキー設定方法は2つある
  • その①:「開発」のタブから設定

f:id:apuridasuo:20190424172922p:plain
図:開発タブからのショートカットキー設定方法

上記の方法で、組み込みなしでショートカットキーを設定できます。
注意点は、
・キーを登録できるのは、引数・戻り値がないPublicな関数のみ
・モジュールファイルのファイル名(オブジェクト名)と、
 そのファイルの中の関数名を同じにすると「図中.③」の
 関数名の部分がめちゃくちゃ長くなる

  • その②:Workbookイベントを捕まえてマクロで設定

ブックを開いた時のイベント内で、
ショートカットキーを設定するマクロを組み込みます。
注意点は、ブックを閉じるときに
設定したショートカットキーを初期化させないと、
全てのExcelを閉じないとショートカットキーが残るということです。

' ブック起動時イベント
Private Sub Workbook_Open()
    ' ショートカットキー設定
    Application.OnKey "指定のキー", "指定の関数名"
End Sub
' ブック閉じる時イベント
Private Sub Workbook_BeforeClose(Cancel As Boolean)
    ' ショートカットキー解放
    Application.OnKey "指定のキー"
End Sub

※「指定のキー」部分に入力する定数は下記リンク参照
https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.onkey

※「指定の関数名」部分は
”オブジェクト名.関数名”の書き方で記入

キー設定時の注意!

ここからが今日躓いたことなのですが、
その①の方法でキーを設定した場合、
エクスポートした後もショートカットキー情報が残る!!

ということです。。。

つまり、
モジュールファイルをエクスポートして別のブックにインポートした時
エクスポート前に「その①」の方法でキー設定を行っていると、
インポートしたブックの方にも自動的にキー設定されています。

なので、ショートカットキーを設定した覚えがないのに
勝手に関数が呼び出されてしまいます・・・

私は今回、マクロ形式ブックでその①方法でキー設定して、
アドイン形式のブックにインポートしてその②方法でキー設定した為
意図しないショートカットキーが潜んでいて気づくのに時間がかかりました・・・

その①の方法でキー設定を管理するのは簡単ですが、
エクスポートすることを考えるならその②で設定する方が
キー設定の管理ができるので断然おススメです!