- ベストアンサー
ExcelVBA キーイベント設定した関数が別のファイルで実行されエラーになります。回避する方法は?
- DELETEキーを拾うため、SheetのOpenイベントにApplication.onkeyにて「DELETE」キーと呼び出し関数を指定しています。
- 標準モジュールにて、呼び出し先関数を定義して普通に処理出来ているのですが、まったく関係の無いほかのエクセルファイルを開きDELETEキーを押下しても、同じ関数が呼び出されてしまいます。
- 困った事に、シートのある特定の状態を見ている為現状エラーメッセージボックスが表示されてしまいます。回避方法は幾らでもあるのですが、具体的な対応策が見つかりません。現状シート名にて判断しようと考えておりますが、かなりの数がある&シート名に制約が生まれるのでやりたくないんです。何か一般的な回避策がありましたら教えて頂け無いでしょうか。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
先ほど回答を投稿したのですが反映されてないので、再投稿。 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 '------------------------------------------------- 外しましたらご容赦!
その他の回答 (1)
- KenKen_SP
- ベストアンサー率62% (785/1258)
こんにちは。 > 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 トラップは有効な方法だと思います。 これが、具体的ではないとするのであれば、どのような方法を望んでいる のかもっと説明した方が良いのでは?
お礼
早速のご返答有難う御座います。 記載内容の不備、申し訳御座いません。 当方がExcelVBAをわかっていない状況で 質問させて頂きました。実際の担当は、当方の部下が行って おり、ヒアリングにて記載させて頂きました。 当方が聞きたかった事は、KenKen_SPさんの記載通りの内容 となります。 大変参考となりました、有難うございます。 ただ、この対応ですと、関係の無いエクセルファイル上での DELキーが無効となってしまいました。 次にご返答いただいているonlyromさんと合わせた形で対応 が必要になりそうです。
お礼
ご返答有難う御座います。 シートの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 ------------------------------------------------- 上記対応により、問題なく処理する事が出来ました。 大変有難う御座いました。