• 解説

    Access 97でもフォームなどはマウスホイールでスクロールさせることができます。
    しかし、ホイールで動くのは困るとおっしゃる方もいます。

    ActiveXを作ることができる人や入手することができる方であれば

    [ACC97] マウス ホイールを使用してフォームのレコードをスクロールできないようにする方法

    があります。
    でも、入手できない方やActiveXなんて使いたくない!(なんて人がいるかどうかわかりませんが)という人は、2000以降で使える

    [ACC2000] マウスのホイールでフォームのレコードをスクロールできないようにする方法

    を使ってみたくなります。
    しかし、このコードは97でそのまま使えません。

    内容を見ていくと97で使えないAddressOfRaiseEventがあります。

    AddressOfについては技術情報 26で解決できます。
    RaiseEventは特にイベント発生させて処理する必要もないので無視できます。

  • 手順

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

      CallWindowProc
      SetWindowLong
      
    2. マウスホイールイベントを処理するためのウィンドウプロシージャを作成します。
    3. フォームの読み込み時イベントで[No.2]で作成したウィンドウプロシージャのアドレスをフォームのウィンドウハンドルとともにSetWindowLongに渡しウィンドウプロシージャを置き換えます。
      置き換えた元のウィンドウプロシージャのアドレスは保存しておく必要があります。(SetWindowLongの戻り値です)
    4. フォームの閉じるときイベントで[No.3]で置き換えたウィンドウプロシージャを保存しておいたウィンドウプロシージャに戻します。
  • その他

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

    2000以降だとVBEを1度でも開くとおかしくなりますが、97では問題ないです。

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

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