- 締切済み
Accessのフォーム画面について
宜しく御願いします。 アクセスでフォームの入力画面を作ったのですが項目が多く、モニタに全部表示し切れません。スクロールバーで上げ下げすればよいのですが、マウスのホイールあるいはある一定の縦幅を持たせて画面を動かして(下方向)入力しやすいようにしたいのですが可能でしょうか。 また、帳票形式の表をフィルターをかけて複数ページに分けたフォームを作りましたがページを開けたとき、常にスクロールの先頭に表示させることも設定できるでしょうか。 教えてください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- irija_bari
- ベストアンサー率73% (70/95)
ANo.1です。すっかり遅くなってしまいました。ごめんなさい。 結論から言うと、Accessフォームをスクロールさせることができました。 以下に手順を書きます(Access2000用)。最後まで読んでから行ってください。 [手順] 1. URL1)http://www.lebans.com/setgetsb.htm からSetGetSB.zipをダウンロード、解凍し、Accessファイルを開く。 2. 開いたAccessファイルのコードビルダ(=Visual Basic Editor)を表示し、 モジュールmodGet-SetScrollInfoの中身をすべてコピーする。 3. スクロールの設定をしたいAccessファイルのコードビルダを表示し、 「挿入」→「標準モジュール」を実行する。 4. 作成したモジュールに2.を貼り付ける。 5. コードビルダ左下の(オブジェクト名)をmodGet-SetScrollInfoとする。 6. URL2)http://support.microsoft.com/kb/278379/ja の「Microsoft Access のみを使用して MouseWheel イベントを作成する」の 手順に従い、「クラスモジュール「標準モジュール」」の作成、スクロールの 設定をしたいフォームのクラスモジュールへの記述の追加を行う。 7. 6.で行った「標準モジュール」の作成のうち、 CMouse.FireMouseWheel という記述を CMouse.FireMouseWheel (wParam) と書き換える。 8. 6.で行った「クラスモジュールの作成」のうち、FireMouseWheel()を以下のように変更する。 ==== Code 1 ==== Public Sub FireMouseWheel(ByVal wParam As Long) RaiseEvent MouseWheel(intCancel, wParam) End Sub ==== end of Code 1 ==== 9. 6.で行ったフォームのクラスモジュールへの記述のうち、clsMouseWheel_MouseWheel() を以下のように変更する。 ==== Code 2 ==== Private Sub clsMouseWheel_MouseWheel(Cancel As Integer, wParam As Long) Dim tmpLng As Long Const scrollVal = 10 If wParam > 0 Then If fGetScrollBarPos(Me) > scrollVal Then tmpLng = fSetScrollBarPos(Me, fGetScrollBarPos(Me) - scrollVal) End If Else tmpLng = fSetScrollBarPos(Me, fGetScrollBarPos(Me) + scrollVal) End If 'MsgBox "You cannot use the mouse wheel to scroll through records." & wParam 'Cancel = True End Sub ==== end of Code 2 ==== 10. 一旦Accessファイルをすべて閉じる。 これで、変更したAccessファイルのフォームはマウスホイールでスクロールするようになります。 7.のConst scrollVal = 10がスクロールする高さの設定です。使いやすい値に設定してください。 [問題点] URL2でも述べられているように、コードビルダに不具合があるため、 「コードビルダ」と「変更を加えたフォームのフォームビュー」を同時に表示すると Accessがフリーズします。(Windows自体も重くなります。) ですから、コードビルダでの編集が終了したら、一旦Accessを終了させ、再度Accessを起動して フォームを開く必要があります。(逆の場合も同様です。) このため、VBAを書いている途中だとVBAのデバッグに支障をきたしてしまいます。 (一旦VBAができあがってしまえば、問題なくAccessを実行できます。) (またAccessをフリーズさせてしまった場合はタスクマネージャでAccessを強制終了 させてください。) この問題を回避する方法もURL2に書いてあります。 VBAの代わりにVisual Basicで記述してDLLファイルを生成、生成したDLLファイルをAccessで 読み込むというものです。 Windowsのことを勉強する良い機会になりました。ありがとうございます。
- irija_bari
- ベストアンサー率73% (70/95)
興味があったので、その後少し調べてみたのですが、 Accessフォームをマウスのホイールでスクロールさせる方法があるようです。 参考URL)http://x7net.com/~access/AcTipsSyncSubformsScroll.html スクロール情報の所得と設定ができるということは、あるテキストボックスで TabあるいはEnterを押したときに、ウィンドウの高さの半分だけ縦にスクロールさせる ということもできるのでしょう。 サンプルのAccessファイルをちょっといじってみたのですが、まだうまくいっていません。 もし、うまくいきましたらまた投稿します。 ちなみに、VBAもマウスホイールが効きませんが、これは、 Wheel Redirector: http://www.vector.co.jp/soft/win95/util/se261633.html というソフトが使えました。
お礼
参考URLどうもありがとうございました。もしかしたら可能性がありそうですね。 私も少しいじってみようと思います。 成功したら是非、投稿してください。 どうぞ宜しく御願いします。
- irija_bari
- ベストアンサー率73% (70/95)
回答してくださる方がいらっしゃらないようなので。 まず、Accessのフォーム画面をマウスのホイールでスクロールさせるのは できないようです。 参考)http://www.fuku3.com/habata//kbbs/kakov9/26144.htm >ある一定の縦幅を持たせて画面を動かして(下方向)入力しやすいようにしたい の意味するところがわからないです。 フォーム(あるいはAccessそのもの)のウィンドウの高さのことでしょうか? 「画面を動かす」とは? >また、帳票形式の表をフィルターをかけて複数ページに分けたフォームを作りましたがページを開けたとき、常にスクロールの先頭に表示させることも設定できるでしょうか。 これもよく意味が捉えられなかったので、以下のような推測の元に書きます。 ==== 推測 ==== ・入力フォームを作成したが縦長で入力しにくいため、「タブ コントロール」を使っている。 ・「タブ コントロール」をクリックしてページを変更したときに、ページの一番上にある 入力項目(テキストボックス、ボタンなど)がFocusされている(入力できる)状態にしたい。 ==== 推測ここまで ==== 1. 作成したフォームを「デザイン ビュー」で開く。 2. 「タブ コントロール」の各ページで、一番上にある入力項目(あるいはページを開いた ときにFocusしたい入力項目)のプロパティを開き、プロパティ・ウィンドウの「その他」タ ブにある「タブ移動順」という項目の値を0にする。 (2. は「タブ コントロール」に含まれる全てのページで行う必要があります。) 「タブ移動順」というのは、Tabキーを押した時にFocus(入力する場所)をどこに移動させるかを 決めるための項目です。 0 -> 1 -> 2 -> 3 -> ... という順で移動していきます。 推測が違っていますと、的外れな回答になっていることと思います。 その場合は補足を入れてください。 以上
お礼
どうもありがとうございました。質問が的を得てなくてすみませんでした。マウスホイールは使えないのですね。残念です。画面を動かすとは入力フォームのテキストボックスに入力していくうちに一番下になると一行づつしか下の項目が出てこなくなるので常に中央で入力できるように画面を自動で上に上げられないかという事でした。 お答え頂いた件はサブフォームを数枚重ねてコマンドボタンで表示させていますが2枚目をあけると1枚目の最終入力した同じ場所で表示されてしまったのでページトップから表示させたかったのです。これは、Requeryで解決しました。 ご親切にご回答頂いてどうもありがとうございました。
お礼
irija_bari様、本当にどうもありがとうございました。何かとっても嬉しいです。早速私も挑戦して完成させます。私は仕事でaccessを使用していますが今後も仕事だけでなく勉強したいと思いました。 irija_bari様の今後のご活躍をお祈りしております。