プロが教える店舗&オフィスのセキュリティ対策術

特定のシートへ移動するマクロをショートカットで行えるようにしたいと考えて
マクロのオプションからショートカットでマクロを実行することはできたのですが
複数のブックを開いているときに同じショートカットを登録していて片方のマクロのみ実行されるのですがどうしたら回避できますか? 

[Ctrl+q]で今選択しているブックの一覧のシートにジャンプしたいです。
アクティブになってるブックのみショートカットを割りあてるようにしたらいいかなって調べて
Application.OnKeyを使えばできそうだったのですが
とりあえず片方のブックに記述してみましたがエラーはでないですがまったく反応してません…なぜでしょうか

Private Sub Worksheet_Activate()
Application.OnKey "^q", "一覧にジャンプ"
End Sub

Private Sub Workbook_Deactivate()
Application.OnKey "^q", ""
End Sub

Sub 一覧にジャンプ()
Worksheets("一覧").Activate
End Sub

ThisWorkbookに記述してます。

A 回答 (2件)

返事が遅くなりました。



Sub Auto_Open() と Sub Auto_Close() のショートカットキーをグローバル化(どこでも使えるようにすること)には、個人用マクロブックの標準モジュールに書くというのが一般的です。

ただし、一覧というシートが全てにあるわけではないので、エラートラップを置いてあげます。

Sub 一覧にジャンプ()
 On Error Resume Next
 ActiveWorkbook.Worksheets("一覧").Activate
 On Error Goto 0
End Sub

として置けばよいと思います。
なお、Activate の意味はご承知だとは思いますが、複数のシートをSelect した状態のままで、目的のシートを前面に出すことも可能だということです。
どちらかというと、シート.Select にする方が多いかもしれません。
    • good
    • 0
この回答へのお礼

おお!なるほど!ありがとうございます!
大変勉強になりました~!感謝です

お礼日時:2017/09/22 14:09

以下のマクロは、どこに書いているのですか?



Sub 一覧にジャンプ()
Worksheets("一覧").Activate
End Sub

ThisWorkbook モジュール だったら、これは動きませんね。モジュールを指定しないなら、標準モジュールになってしまいます。同じ場所に書きたかったら、
Worksheet_Activate() の中は、
Application.OnKey "^q", "ThisWorkbook.一覧にジャンプ"

私は、全部、標準モジュールに書きます。呼び出しが楽だからです。
Sub Auto_Open() と Sub Auto_Close() に書きます。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
ご指摘されたどおりThisWorkbook.つけてませんでした…
そもそもSubプロシージャがsheet_Activateになってました。(;´д`)
ブックがアクティブになってる状態でいつでも有効にしたかったのにバカでした

質問がちょっとずれるのですが
標準モジュールに書いて機能したのは確認できたのですが
同時に他のブックを開いている状態でショートカットキーを打つと反応しなかったりマクロを実行できないといった事が起きてしまいます。

一覧というシートが実はブックごとに"○○一覧"という感じのシート名になっているので
複数ブックを同時に開いているときに選択しているブックでのみ有効なショートカットにしたかったのですができますか?
Sub Auto_Open() と Sub Auto_Close() で書くと開いた直後はいいんですが最初に開いたブックに戻ってきたときに無効なんですよね…

お礼日時:2017/09/21 13:04

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています