店長のひとりごとパソコンショップT&A店長の奮闘記録ですタブコントロールでキー入力イベントが発生しない!?商品管理ソフトではタブコントールを使って、[商品検索]画面と[新規入力]画面を切り替えています。[商品検索]で検索キーワードを入力し[検索実行]ボタンをクリックすると検索結果を表示できます。ここでも、マウスを使わずキー入力で検索実行できた方が早いので、ショートカットキーを設定しようとしました。フォームの[キーボードイベント取得]を「はい」に設定してあるのですが、キー入力イベントが発生しないのです。見落としがないか何度もコードをチェックしましたが、ありません。そこでいつものようにWEBを探したところ、同じ問題を指摘している記事がひとつだけ見つかりました。2010ではこの問題が起こり、2007では起こらない模様です。私の開発環境も2010です。結局、解決方法は載っていませんでした。しかたがないので、他の方法で目的を達成することを考えることにしました。検索タブの中の一部のテキストボックスでは、数字しか入力を受け付けないようにKeyPressイベント・プロシージャを使っており、同じ機能を別モジュールでもよく使うので、標準モジュールに記述し呼び出していますが、ちゃんと機能していました。いうことは、標準モジュールを使い関数的に作ればうまくいくかもしれないと思い、やってみたら正解でした。0Pagetop開いたフォームがアクティブにならない現在運用中のPOSレジソフトを少し変更することにしました。従来は、販売処理完了後メッセージボックスを表示させ、確認後レジ画面を初期化していたのですが、メッセージボックスは小さくて目立たないので、新しくフォームを作りそこにお釣りを表示させることにしました。それ自体簡単なことなのですが、問題が発生しました。メッセージボックスの時はそれがアクティブになっていたのに、フォームに変えたらアクティブにならないのです。アクティブだとキー入力を受け付けますが、そうでないと受け付けず、マウス・クリックが必要となるのです。レジ処理はできるだけ迅速に行う必要があり、できるだけマウスを使わずにキー操作でできるように設計しています。VBAからではなく単純にフォームを開くと、当然ですがそのフォームがアクティブになります。メインフォームのVBAからそのフォームを開くとアクティブにはならないのです。試行錯誤し考えた結果、フォームを開く元のイベントがGotFocusだったからということに気づきました。メイン・フォームのコントロールがフォーカスを取得したときのイベント・プロシージャで他のフォームを開いてもフォーカスは移るはずがありません。いうことで、別のイベント(キー入力)プロシージャに処理を移し、そこから開くようにしたらアクティブになりました。私よりも上級のプログラマーなら当たり前の話かもしれませんが、意外な落とし穴でした。