• 解説

    キーボードの左右にはShiftキーやCtrlキーがあります。Enterキーもテンキーにあったり複数存在するキーがあります(ないのもあるかもしれない)
    Accessではどちらのキーを押してもShiftならvbKeyShift(16)、CtrlならvbKeyControl(17)、EnterならvbKeyReturn(13)になり、どちらを押したか分かりません。
    これをどうしても知りたければAPIを使用し判定します。

  • 手順

    1. 下記のAPIを定義します。

      GetFocus
      SetWindowLong
      
    2. キーボードイベントを処理するためのウィンドウプロシージャを作成します。
    3. 処理を行いたいコントロールのフォーカス取得時などで、GetFocusを使用しコントロールのウィンドウハンドルを取得します。
      テキストボックスなどの場合は、マウスでクリックしたときにフォーカス取得時でウィンドウハンドルが取得できない(フォームのウィンドウハンドルが取得される)ので工夫が必要です。
      ボタンの場合は、フォームのウィンドウハンドルを使用します。
    4. ウィンドウプロシージャを[No.2]で作成したウィンドウプロシージャのアドレスを[No.3]で取得したウィンドウハンドルとともにSetWindowLongに渡し置き換えます。
      置き換えた元のウィンドウプロシージャのアドレスは保存しておく必要があります。(SetWindowLongの戻り値です)
    5. コントロールのフォーカス喪失時などで[No.4]で置き換えたウィンドウプロシージャを保存しておいたウィンドウプロシージャに戻します。
  • その他

    AccessのVBAおよびAPIの知識が必要です。

説明がわからないなどありましたらお問い合わせでお知らせください。

ここに掲載された情報を使用したことによって発生した、いかなる損害に対しても
管理者である雅は一切責任を負いません。