次の方法で共有

Excel2013のファンクションキーの動作について

Anonymous
2017-10-18T00:37:11+00:00

エクセル2013でF3キーにマクロを割り当てて、F3キー押下時にマクロ処理を実行する仕組みを作成しています。

上記マクロを組み込んだBook-A、Book-Bがあるのですが、両Bookを開いた状態で、Book-AでF3キーを押した際に該当のマクロがBook-Bで動作してしまいます。

どうも後に開いたBookで実行されるという法則があるようです。

(Book-Bを先に開いてBook-Aを開くと、Book-Aでマクロが実行される。)

なお、ファイル名だけ違うだけで、マクロの内容は全て一緒。キーの割り当てはWorkbook_OpenでApplicaiton.OnKeyで宣言しています。

またBook-Bを閉じた後、Book-AでF3キーを押すと、勝手にBook-Bが開きBook-B上でマクロを実行してしまいます。

本件については原因がまったくわからず、ご助言を頂けると助かります。

Microsoft 365 と Office | Excel | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

ひまじん 17,185 評価のポイント
2017-10-19T02:00:54+00:00

横合いから失礼します。ちょっと気になったもので。

>対応については「MacroOptionsメソッド」を利用する事も検討したいと思います。

と書かれておられますが、「MacroOptions メソッド」 ではファンクションキー( F3 等)を設定できません。

ファンクションキーを設定したい場合には、やはり 「OnKey メソッド」 を使うしかないかと思います。

「OnKey メソッド」 を使った対処方法としては、Book がアクティブかどうかを判断してショートカットキーを設定すれば良いので、Workbook_Open() を使わずに Workbook_Activate() を使ってみてはいかがでしょう。

以下、その具体例を書いてみましたが、必要なければ読み飛ばしてください。

<具体例>

両方の Book で Workbook_Open() を削除し、下記を設定します。

("test" の部分は実際に呼び出すプロシージャ名に変更。)

Private Sub Workbook_Activate()

  Application.OnKey "{F3}", "test"

End Sub

Private Sub Workbook_Deactivate()

  Application.OnKey "{F3}"

End Sub

<動作>

Book を開いた時(または選択した時)= Active になった時、F3 キーにショートカットキーを設定する。

Book を閉じた時(または他の Book を選択した時)= Deactive になった時、F3 キーに設定したショートカットキーを解除して Excel の初期機能に戻す。

これで、両方の Book をどのような順番で開いたとしても、選択されている(アクティブな)Book で設定されたショートカットキーに関連付けられたプロシージャが起動します。

本来、同一のマクロを設定した2つの Book を対象とするだけならば Workbook_Activate() だけでも良いのですが、対象とする2つの Book のどちらか(あるいは両方)を開いている状態で全く関連のない Book を開くと、その Book も影響を受けてしまいます。

なので、Workbook_Deactivate() を追加しています。

尚、上記の test プロシージャの内容は両 Book 共、

Sub test()

  MsgBox ThisWorkbook.Name

End Sub

として、どちらの Book からの起動か確認しています。

(期待通りに動作していれば、ThisWorkbook = ActiveWorkBook のはずですので。)

Excel2013 は持ち合わせていないため、Excel2016 で動作確認しています。

ご参考になれば幸いです。

この回答は役に立ちましたか?

0 件のコメント コメントはありません

3 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2017-10-29T22:01:56+00:00

    ひまじん さん

    返信ありがとうございます!

    そして返信のお礼が遅くなってしまいまとに申訳ございません。

    ご教示いただいた内容で書き直して同様の事象が発生しないことを確認できました。

    大変助かりました。

    あらためて御礼申し上げます。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2017-10-18T22:52:03+00:00

    TETUO様

    返信ありがとうございます。

    Excelの仕様なのですね。

    原因がわかりすっきりしました。

    対応については「MacroOptionsメソッド」を利用する事も検討したいと思います。

    ありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2017-10-18T02:43:05+00:00

    https://www.moug.net/tech/exvba/0150112.html

    「マクロにショートカットキーを設定する」

    を見たら下記がありました。

    「OnKeyメソッドはExcel自身の設定です。

     シートカットキーを設定した後、Excelを終了するまでの間、そのショートカットキーが有効になります。

     そのプロシージャが記述されたブックを開いていない状態でショートカットキーを押したとしても、Excelはそのブックを開いて実行しようとします。」

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません