_基本

特定のシートのみで、OnKeyイベントを取得したい【WorkSheet_Change】【ExcelVBA】

Onkeyメソッドは 開いている全ブックで動作する

Onkeyメソッドでは、自作のショートカットキー作成や、 F1 のヘルプキーを無反応にすることが可能です。

■参考記事
「Ctrl+Shift+Q」で「セル結合・セル結合解除」をパーツ化する。【エクセルマクロ】
「Ctrl+Shift+V」で「値で貼付する」をパーツ化する。【エクセルマクロ】
「F1」キーを無効設定し、ヘルプを起動させない【エクセルマクロ】

上記のように、セルで Enter を押した際にマクロを起動させたい場合があるかと思います
その場合、注意点があります。

注意点

通常auto_open等に、onKeyメソッドを設定をすると、
auto_openのコードが存在するWorkbook以外にも指定したショートカットの動作が行われてしまいます。

特定シートのみで Enter でマクロが起動したい場合は、以下のようにする必要があります。

サンプルコード

'■シートモジュールに記載する部分。(今回はSheet1に記入)
'-----------------------------------------
'■Sheet1が前面に表示された場合はEnterでTestModuleを起動
Private Sub Worksheet_Activate()
    Application.OnKey "~", "TestModule"
End Sub
'■Sheet1が前面に表示されなくなった場合はEnterは通常動作に戻す
Private Sub Worksheet_deActivate()
    Application.OnKey "~"
End Sub

'■ThisWorkbookモジュールに記載する部分。
'-----------------------------------------
'■ウィンドウが前面に表示された場合はEnterでTestModuleを起動
Private Sub Workbook_WindowActivate(ByVal Wn As Window)
    If ActiveSheet.Name = "Sheet1" Then Application.OnKey "~", "TestModule"
End Sub
'■ウィンドウが前面に表示されなくなった場合はEnterは通常動作に戻す
Private Sub Workbook_WindowDeactivate(ByVal Wn As Window)
    Application.OnKey "~"
End Sub

 

OnKeyではなく、Worksheet_Changeで判断した方がシンプル

サンプルコードまで提示していますが、別の方法で実現した方が圧倒的に良いです。

Enter でマクロ起動する場合は、入力したセル情報をキーにしてマクロを起動する場合だと考えます。
上記であれば、下記記事のように特定セル範囲に変更があった場合にマクロ処理した方がコードがシンプルです。

特定のセル範囲で値が変更された時に処理を実行【ExcelVBA】

関連記事

■OnKeyの基本と有効活用
任意のキー押下でマクロを起動する【OnKey メソッド 】VBA
OnkeyメソッドでEnterキーが効かない場合の対処法【ExcelVBA】

「ActiveSheetをCSV出力して保存する」をパーツ化する。【ショートカットキー】【VBAマクロ】
「ActiveSheetをタブ区切りのテキストで出力保存する」をパーツ化する。【VBAマクロ】
「ActiveSheetをPDF保存する」をパーツ化する【ショートカットキー】【VBAマクロ】

 

コメント

  1. シートモジュールに記載した”TestModule”はどのモジュールに記載すればいいのかわからない。

    ThisWorkbookモジュールに記載した”callmsg”(これは上記の”TestModule”とは別物なのか?)もどのモジュールに記載すればいいのかわからない。

    • >シートモジュールに記載した”TestModule”はどのモジュールに記載すればいいのかわからない。
      どのモジュールでもよいです。

      >ThisWorkbookモジュールに記載した”callmsg”(これは上記の”TestModule”とは別物なのか?)もどのモジュールに記載すればいいのかわからない。
      誤記でしたので修正しました。

タイトルとURLをコピーしました