• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Accessでのマウスホイールの無効化)

Accessでのマウスホイールの無効化

KenKen_SPの回答

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

> 1.フォームには貼り付ける際、前回は末尾に貼り付けたが今回は冒頭に >  貼り付けた あ。。これですね。原因は。 Private WithEvents ~ はモジュールの先頭でなければなりません。 先頭というのは、1行目という意味ではなく、他プロシージャよりも 必ず前の部分に書くという意味です。 Sub aaa()   '処理 End Sub Private WithEvents ~ はダメなのですが、 Private hoge As Long Private WithEvents ~ Sub aaa()   '処理 End Sub のようならば OK。他 Sub プロシージャよりも前のブロックに書か ないといけない決まりになってます。 > サブクラス化の危険性を考慮した、より安全な手法による、 > 参考ソースの方はいかがでしょうか? 表現の仕方が悪かったようです。Access でマウスホイールの挙動を 制御するには、  1. サブクラス化を行う  2. ActiveX 等を使う 以外の方法はありません。 2. は別途で Dll または OCX 等のファイルをインストールする必要 があります。未確認ですが、Vector 等で探せば VBA 用のものが 見つかるかもしれません。なければ自作するしかないんですが・・・ ただし、社内で配布するものとして追加インストールが必要な手法 というのは難点になりますよね...?  # システム管理者や社内のOA運用方針との兼ね合いで 一方、1. のサブクラス化では、追加インストールは不要ですが、 先述のようなリスクもあるわけです。これは、ユーザー側という よりも、システム設計・開発しているあなたの側に細心の注意を 払う必要があるということを意味しています。 つまり、バグの無いものを作る必要があるということです。 そして、十分にテストする必要もあります。 #2 を回答した時点では、参考にされたソースを詳しく検証して ませんでしたから、ソースに不備があるのかも? ならば、手元に ある以前開発したものを参考ソースとして提示・・といった発言を してしまったのですが、特に参考にされたソースには問題がありま せんでした。  # 元々は MSDN (Microsoft の技術サポート情報サイト)に  # 公開されていたもののようです 似たようなソースをアップしても有益な情報とはならないでしょう。 従いまして参考ソースのアップは控えさせて頂きました。 私の回答の結論としては、繰り返しになりますが、  ・サブクラス化の手法を使う(参考にされたソースを活用する)  ・エラーが発生しないように、十分にテストを繰り返し、バグの   無いモノをリリースする いうことになります。 誤解を与えてしまったようで、申し訳ありません。

Spacewatch
質問者

お礼

 丁寧な解説をいただき有り難うございます。  よくわかりました。  1. サブクラス化を行う  2. ActiveX 等を使う のふたつの方法があり、2はユーザに負担をかける(あるいはそのサポート の為の管理者側の負担もあるかも?)、一方、1についてはもしバグがあると システム全体に影響を及ぼすので、管理者側がしっかり検証したものである 必要があるが、今回のソースのように検証されたものであれば問題はない、 ということですね。  なお、ほかに一点だけ気になることがあり、補足質問の方に書かせて いただきます。  もし、なにか見識があればコメントいただければ幸いです。  今回はどうも有り難うございました。大変助かりました。 以上  

Spacewatch
質問者

補足

 一点だけ気になっていることがあるのですが、それは、先の補足に 書かせていただきました『VBEによるコード修正後、Accessを閉じる際の 操作の違いによって、VBAのセーブがうまく行ったり行かなかったりという ことがあるのか・・・?』 という点です。  実は、昨日、うまくいきましたとの状況報告をアップした後に、再びうまく いかないことがありました(・・・・・・該当フォームを開くと、「計算しています」 の状態が延々と続きフリーズしてしまう現象)。  このときは、一旦タスクマネージャで強制終了した後、データベース ウィンドウを開き、モジュールオブジェクトがウィンドウ右側に表示されている 状態で、データベースウィンドウの右上の×をクリックして閉じる、という ことを行い、再度アプリ起動すると、今度はうまくいきました。  その後はいまのところ問題ありません。  Accessは、他のOfficeソフトと異なり、ウィンドウを閉じる行為が、セーブ されるデフォルトになっていて、少し感覚が違うのですが、上記についても このあたりの関係で、VBAを使う際に何か留意しておくべき事項がある ということなのでしょうか?  また、念のため確認ですが、上記のような状況は、サブクラス化による 不安定現象ではないと考えてよろしいのですよね?  これらについて、なにか見識がありましたら最後にコメントいただけません でしょうか?  よろしくお願い致します。

関連するQ&A

  • マウスホイールを動かしても次のレコードに移動しない

    マウスホイールを動かしても 次のレコードに移動しないように制御したいのですが http://www.accessclub.jp/bbs2/0027/beginter08905.html の通りに行ったら、 私の環境ではフリーズしてしまいます。 OS:XP OFFICE:2003 です。 フォームを開くと、VBEがずっと実行中になり、 フォームを動かすことも、フォームに値を入れる事もVBEを終わらせる事も出来ずにいます。 タスクマネージャーから無理やり終わらせるしかないです。 アクセス2003ではこの方法はダメなのでしょうか?

  • Access 既定値を使って・・・

    お世話になります 下記参考URLになります http://www.accessclub.jp/bbs2/0043/beginter14146.html 2つめの方法ですが PC本体・パーツフォームがサブフォームの場合は どのような呼び方をすればいいのでしょうか? Public Sub SelectParts()   Me.パーツ名=メインフォーム名!PC本体・パーツフォーム!.パーツ名 End Sub どなたかわかるかた宜しくお願いします

  • Access

    お世話になります 参考URL http://www.accessclub.jp/bbs2/0043/beginter14146.html 1つめの方法 「PC本体・パーツフォーム」側コマンドボタンクリック時に 注文フォーム.パーツ名=Me.パーツ名 注文フォーム.金額=Me.金額 上記の手法でおこなうとえらーがでます エラー:実行エラー424 オブジェクトが必要です デバック:注文フォーム.パーツ名 = Me.パーツ名←エラー箇所 解決方等ありましたらよろしくおねがいします

  • ACCESSがクラッシュ?

    ACCESS初心者です。 一応、対応できたので緊急ではありませんが非常に不思議な現象が発生しました。 もし原因や対応等についてご存知の方があればご教示願います。 経緯は時間を追って以下の通りのです。 1.ACCESSでシステムを開発(具体的にはメイン・サブフォームの作成)を行っていました。 2.一旦ウィザードでフォームを作った後、かなりあちこちをいじっておりました。いろいろなエラーメッセージが表示されていました。 3.突然、砂時計が出っ放しになってどこをクリックしても受け付けられなくなりました。 4.30分以上待っていましたが全く変わらないため、やむを得ず強制終了をかけました。(前日にDBを別名でセーブしてあったのでそこからやり直してもいいと思っていました) 5.再度ACCESSを立ち上げ、当該フォームを呼び出すと「コンパイルエラー」が表示されVBAが表示されましたが、それは作業中であったフォームではない、別のフォームのもののようです。 6.そのフォームをフォームビューで開いてもコンパイルエラーになるのはいいとして、同じDB内の全く別のフォームを実行してもコンパイルエラーが出ます。 7.何をやってもエラーになり、表示されているVBAの画面を見ると「 ate Sub ・・・・」等となっていてどうも元のコマンドの最初の方が消えてしまって不完全なコマンドになっているようです。 (当然私は初心者ですしそんなところを触った覚えも何もないのですが) 8.どうもDB全体が壊れているようでした。ACCESSの場合はすぐに壊れるという話を聞いていましたので、このDBはあきらめて閉じて、昨日セーブしておいたDBを開きました。 9.なんと!、昨日セーブしてあったDBを立ち上げ、あるフォームを実行したところ、また先ほどと同じコンパイルエラーが出ます!DBが違うはずなのになぜ??? 10.ACCESS経験者に応援を求め、とりあえず壊れたコマンドが表示されている画面の全ての行に「’」を入れてコメント行にしたところ、なんとかエラーは起きなくなりました。 以後どのDB、どのフォームを開いても大丈夫です。 以上が経緯ですが、こんなことってACCESSではありえることなのでしょうか? とりわけ、あるDBの不具合が全く別のDBにも波及するというのは全く理解できませんしこんなことではACCESSをこれから使う気も失せてしまいそうです。 何かアドバイス等あればよろしくお願いいたします。

  • エクセル(VBE)について

    エクセル(VBE)について SubまたはFunctionの定義がされてません。とエラー表示が出てしまうのですが

  • リストボックスのスクロールバーをマウスで動かしたい

    エクセル2007です。 Sheet1のA列に 1行目から順に 1 2 3 4 5 6 7 8 9 10 といれました。 ユーザーフォームを新規作成し、リストボックスを設置しました。 VBAコードは、 Private Sub UserForm_Initialize() Me.ListBox1.RowSource = "Sheet1!a1:a10" End Sub にしました。 VBE画面でF5を押して、フォームを表示させるとリストボックスにスクロールバーが表示されますが、 フォームをクリックして、マウスホイールでぐりぐりしても、リストは動きません。 画像のように、4にカーソルをあて、グリグリしてもダメです。 どうしたら動くようになるのでしょうか?

  • マクロ ユーザーフォームが表示されない

    いつも回答して頂き、ありがとうございます。 Sub UserForm1() UserForm1.Show End Sub と記述しましたが、エラーが発生し、ユーザーフォームが表示してくれません。 コンパイルエラー:Functionまたは変数が必要です フォームはコマンドボタンを一つ配置し、 Private Sub CommandButton1_Click() Unload UserForm1 End Sub と記述してあるだけです。何が悪いのでしょうか?御教授の程宜しくお願い致します。

  • アクセス イベントの発生を停止させたい

    アクセスでイベントを発生しないようにしたいのですが エクセルで使用できる、Application.EnableEvents = Falseを使うと、 コンパイルエラーになります。 フォームを指定して、 .FilterOn = True を通ると、 該当のフォームのPrivate Sub Form_Current()イベントが発生してしまうので、 Application.EnableEvents = Falseのように、イベントの発生を停止させたいです。

  • アクセス2007でのエラー

    初めてアクセス使用してます。アクセス2007でマクロ実行でエラーが出て困っています。 「マクロ式またはVisual Basicコードで参照されている'***'フォームが見つかりません。」 後記として、'***'のフォームがないかコンパイルエラーかと表示されています。 '***'の名のフォームは存在しますので、どうしていいのかわかりません。アクセス自体をインストールし直すと正常に動作します。 素人作なので初歩的、根本的なミスなのかもしれませんが、良い方法があればお願いします。

  • Access2000のVBAでコンパイルエラー

    Access2000のVBAで初歩的な質問があります。 「tblShi」というテーブルがあります。 フォームにボタン「btn1」を作り、 デザインビューでボタンのプロパティを開いて イベントのクリック時のところで、 「ビルダの選択」をコードビルダにしました。 そして「Private Sub btn1_Click()」の中に、最初に   Dim db As Database という記述をしています。 このフォームを開いてボタンを押すと、なぜか   コンパイルエラー   ユーザ定義型は定義されていません というエラーが表示されてしまいます。 たしかにコードを書いているときに、   Dim db As のところまで入れると、小さいウィンドウの中に たくさん候補が表されますが、 その中に「Database」というのがないです。 「QueryDef」とか「Workspace」とかもありませんでした。 (「Recordset」はありまして、それはコンパイルが通ります) いろいろな解説を見ても、やはり最初はどれも 「Database」型を宣言しているようなんですが… 何がよくないのでしょうか。 もしわかる方がいらっしゃったら教えてください。