• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ExcelVBA キーイベント設定した関数が別のファイルで実行されエラーになります。回避する方法は?)

ExcelVBA キーイベント設定した関数が別のファイルで実行されエラーになります。回避する方法は?

このQ&Aのポイント
  • DELETEキーを拾うため、SheetのOpenイベントにApplication.onkeyにて「DELETE」キーと呼び出し関数を指定しています。
  • 標準モジュールにて、呼び出し先関数を定義して普通に処理出来ているのですが、まったく関係の無いほかのエクセルファイルを開きDELETEキーを押下しても、同じ関数が呼び出されてしまいます。
  • 困った事に、シートのある特定の状態を見ている為現状エラーメッセージボックスが表示されてしまいます。回避方法は幾らでもあるのですが、具体的な対応策が見つかりません。現状シート名にて判断しようと考えておりますが、かなりの数がある&シート名に制約が生まれるのでやりたくないんです。何か一般的な回避策がありましたら教えて頂け無いでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • onlyrom
  • ベストアンサー率59% (228/384)
回答No.1

先ほど回答を投稿したのですが反映されてないので、再投稿。   ThisWorkbookモジュールに全て(OnKeyで実行のマクロ以外)のコードを置いて。。 ( Sheet2 でのみで動作させる場合)   '------------------------------------------------ Private Sub Workbook_Activate()   If ActiveSheet.Name = "Sheet2" Then     Sheets("Sheet2じゃないシート").Activate     Sheets("Sheet2").Activate   End If End Sub '----------------------------------------------- Private Sub Workbook_Deactivate()    '▲OnKey解除▲ End Sub '----------------------------------------------- Private Sub Workbook_SheetActivate(ByVal Sh As Object)   If Sh.Name = "Sheet2" Then      '●OnKey セット●   End If End Sub '--------------------------------------------- Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)   If Sh.Name = "Sheet2" Then      '▲OnKey解除▲   End If End Sub '------------------------------------------------- 外しましたらご容赦!  

mogura1go
質問者

お礼

ご返答有難う御座います。 シートのActive、DeActiveを拾ってOnKeyの設定を 行わないと、新たなシートでDELキーが有効になりません でした。 下記のように対応しました。 ------------------------------------------------- 'ThisWorkBook Private Sub Workbook_Activate()  ●OnKey セット● End Sub Private Sub Workbook_Deactivate()  ●OnKey 解除● End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean)  ●OnKey 解除● End Sub '標準モジュール Sub DELキーイベント関数() If ActiveWorkbook Is ThisWorkbook Then DELETE処理・・・・・ End If End Sub ------------------------------------------------- 上記対応により、問題なく処理する事が出来ました。 大変有難う御座いました。

その他の回答 (1)

  • KenKen_SP
  • ベストアンサー率62% (785/1258)
回答No.2

こんにちは。 > SheetのOpenイベント > 現状シート名にて判断しようと考えておりますが Sheet には Open イベントはありません。Workbook_Open のことかな? 下記は、とりあえず Auto_Open にしましたが、ご都合で読み替えて下さい。 Sub Auto_Open()   Application.OnKey "{DELETE}", ThisWorkbook.Name & "!SampleProc" End Sub Sub Auto_Close()   Application.OnKey "{DELETE}" End Sub ' // 標準モジュール Sub SampleProc()   If ActiveWorkbook Is ThisWorkbook Then     MsgBox "コールされました"   End If End Sub > OnError で処理していたり > まったく何も考えてなかったり。 > 具体的な対応策が見つかりません。 どのような時に、どのようなエラーが発生するかを理解した上で施す、 最小限の On Error トラップは有効な方法だと思います。 これが、具体的ではないとするのであれば、どのような方法を望んでいる のかもっと説明した方が良いのでは?

mogura1go
質問者

お礼

早速のご返答有難う御座います。 記載内容の不備、申し訳御座いません。 当方がExcelVBAをわかっていない状況で 質問させて頂きました。実際の担当は、当方の部下が行って おり、ヒアリングにて記載させて頂きました。 当方が聞きたかった事は、KenKen_SPさんの記載通りの内容 となります。 大変参考となりました、有難うございます。 ただ、この対応ですと、関係の無いエクセルファイル上での DELキーが無効となってしまいました。 次にご返答いただいているonlyromさんと合わせた形で対応 が必要になりそうです。

関連するQ&A