VBAでフォームのスクロールバーが下にいってしまう

このQ&Aのポイント
  • VBAを使用して縦に長いフォームを作成していますが、フォームビューで開くとフォームが下部に表示されてしまいます。スクロールバーを最上部に戻す方法や、レコードをセットする方法について教えてください。
  • VBAを使用して縦に長いフォームを作成していますが、フォームビューで開くとフォームが下部に表示されてしまいます。スクロールバーを最上部に戻す方法や、レコードをセットする方法についてご教示ください。
  • VBAを使用して縦に長いフォームを作成していますが、フォームビューで開くとフォームが下部に表示されてしまいます。スクロールバーを最上部に戻す方法や、レコードをセットする方法についてアドバイスをいただけますか?
回答を見る
  • ベストアンサー

VBAでフォームのスクロールバーが下にいってしまう

縦に長いフォームを作っているのですがフォームビューをするとフォームがやや下の方の画面で開けられてしまいます。 原因はフォームオープン時に対象レコードをテキストボックスに入れたり、プルダウンボックスにレコードをセットしたりしているからだと思います。(全てコーディングで) どうすればスクロールバーを一番上まで戻すことができますか?元からスクロールバーを移動させずにレコードをセットする方法でもかまいません。 それともう一つ、フォームのプルダウンボックスに、プロパティの値集合ソースからSQLをセットしたりする方法がありますが、VBAのグローバル変数をWHERE句に使用したい場合はこの方法は使えませんよね? 最後にもう一つクエリはVBAのグローバル変数使えませんよね? フォームのコントロールから値を取得することもできませんよね?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

ACCESSをお使いになっていると想定して返答させて頂きますね。 (クエリ等の話が出ているので) フォームのスクロールは VBAのコーディングで値をセットしているならば それらが終わった後で SendKeys "{PGUP}" を実行してPageUpキーを送信してやるのが手っ取り早いかと。 クエリがフォームのコントロールの値を取得する事は可能です。 [Forms]![フォーム名]![コントロール名] の形式でクエリに埋め込んでみてください。 ただし、参照先のフォームはフォームビューで 開かれている必要があります。 VBAのグローバル変数はクエリから直接は参照できませんので VBAのコーディングでグローバル変数を使ってSQLの文字列を構築し Currentdb.QueryDefs("クエリ名").SQL = "作成したSQL" でクエリのSQLを書き換えるという方法があります。

saimon296
質問者

補足

SendKeys "{PGUP}"の方法ダメでした。順番的に一番最後に処理させているのですが、デバッグモードで調べてもピクリとも反応しませんでした。 なぜできないのか原因はわかりませんが、とりあえず他の方法で対処できました。 [Forms]![フォーム名]![コントロール名]の方法は利用してみます。 フォーム中のコントロールの埋め込み式(値集合ソース)で利用して、別のフォームのコントロール値を取得して現在のフォームのプルダウンボックスのSQLにセットできそうなので今度やってみます。 Currentdb.QueryDefs("クエリ名").SQL = "作成したSQL"この方法は今のところ使うところがないので頭の片隅に置いておきます。

その他の回答 (1)

回答No.2

対処できたとの事ですので補足になりますが SendKeysステートメントはあくまで単純にキー操作を 実行するだけの処理ですので、タイミングがずれると 意図した通りに動いてくれない事はあります。 キーボードからの操作を受け付けないタイミングで実行されて 動かない事も考えられますし、デバッグモードで実行しても 通常実行時と同じ動きにはなりません。 (デバッグモードの画面に対してキー操作した事になる) 手っ取り早い方法という事で挙げてみましたが、あまり安定したやり方とは言えないので フォーム上部の方にあるコントロールに対して [コントロール名].SetFocus でフォーカスを移した方が良かったかもしれませんね。 ただこれだとコントロールの位置に依存しますし 画面の最上部までスクロールする保証はなかったものですから。

saimon296
質問者

お礼

ありがとうございます。 実は私もその方法でしました。フォームの一番上に可視のテキストボックス(後で不可視にする)を貼り付けて、そこにフォーカスを一旦移動させてから、その少し下の目的のコントロールにフォーカスを移動させることで対応しました。 SendKeysステートメント自体初めて見たので参考になりました。

関連するQ&A

  • Accessフォームのスクロールバーに関して

    こんにちは。Access2000を使用しています。 今回、データ照会用フォームを作成しようと思い、 タブコントロールの中にリストボックスを配置し、 条件に応じてそのリストボックスの値集合ソース (値集合ソースはクエリを使用し抽出条件として このフォームのテキストボックスに入力した値を使用) を変更してみました。 そのこと自体うまく言ったのですが、リストボックス につきものと思われるスクロールバーがでてきません。 (表示しきれない最後のレコードは途中で切られてみる ことができません。) どなたかスクロールバーを表示させていただけません でしょうか? どうぞよろしくお願いいたします。

  • アクセスVBA フォームのスクロールバーを動かす。

    アクセスVBA フォームのスクロールバーを動かす。 作成したフォームの横スクロールバーポジションを、一番右端や左端にしてしまうことをVBA側でしたいのですが可能でしょうか? コードがわかりません。お願い致します。

  • ACCESSのフォームでスクロールバーを一番下に持っていくVBAの記入方法はありますか?

    ACCESSのVBAでスクロールバーを一番下に持っていくコマンドはありますか? 教えてください。ACCESSでフォームを作っています。 元となるフォームを「フォームA」として その中にサブフォーム「フォームB」があります。 フォームBについての質問です。 フォームAにメイン情報があり、フォームBは フォームAの関連情報が幾つかとうろくされています 1:Nの関係です フォームBは帳票フォームです。 レコードの新規作成のコマンド「DoCmd.GotoRecord acNewRec」 や 最終レコードへの移動コマンドでは カーソルが一番下に移動するのですが スクロールバーまで移動しないので 画面上変わらなく困っています。 実際の構成は フォームAで選択した顧客の情報が フォームBに日付ごと表示されています。 一画面に5レコード表示するようにしています(1:5) ここで6レコード目の入力のために レコードの新規作成ボタンや最終レコードへの移動ボタンを 作成したのですが、右側のスクロールバーが 動いてくれないので、カーソルだけ移動して 画面上は5レコードが表示されたままになっています。 分かりづらい質問で申し訳ありません なにとぞお願いいたします。

  • ウィザードでフォーム作成時のスクロールバー

    access2003です。  フォームを新規作成→オートフォーム(単票形式、表形式)→クエリもしくはテーブルの選択→OK をしたときに書式のスクロールバーが「あり」と「なし」のテキストボックスが作成されますが 何を基準に「あり」か「なし」かに判断されるのでしょうか? データの型なのかな?とも思ったのですが テキスト型でもある場合とない場合があります。 なんとなく入力されている文字が長いフィールドのテキストボックスにはスクロールバーがあります。 またデフォルトで全て「なし」で作成する方法はありますでしょうか? よろしくお願い致します。

  • スクロールバーの表示について

    お世話になります。 フォームやフレームにスクロールバーを表示させたいのですがScrollBarsプロパティやKeepScrollBarsVisibleプロパティに値を設定してもレールの部分だけ表示されてバーが表示されません。 というのもフォームやフレームの中にたくさんコントロールを置きたいのですがフォームやフレームの中に納まらないためスクロールバーでスクロールして納まらない部分も表示できるようにしたいと思っています。 フォームやフレームの中をスクロールするにはどうすればよいのでしょうか(テキストボックスではバーが表示されスクロールできます)。 よろしくお願い致します。

  • マウスホイールでテキストボックスのスクロールバーを

    マウスホイールでテキストボックスのスクロールバーを移動させたいです 帳票フォームにしています。 フォームのテキストボックスにスクロールバーありにしてるのですが そのテキストボックスがアクティブになった時に、 マウスホイールをクリクリした時に、 テキストボックスのスクロールバーを移動させたいのですが フォーム上スクロールバーが動いてしまいのレコードが移動してしまいます。 テキストボックスがアクティブの時に↓キーを押せばテキストボックスの スクロールバーは移動しますが、 マウスホイールで操作することは不可能でしょうか? テキストボックスには 1 2 3 4 5 6 7 8 9 10 がはいっています。

  • スクロールバーをVBAで操作したい

    エクセルの場合は、 Sub Macro1() ActiveWindow.SmallScroll Down:=100 End Sub でスクロールバーの位置をVBAで設定できますが アクセスのフォームのスクロール倍の位置をVBAで設定することは可能でしょうか?

  • VBA:水平スクロールバーが要らない!

    XP&Excel2000でVBAを組んでいるビギナーです。 その中でリストボックスを入れたいのですが、例えば、 4文字程度のテキストしかリストになく、 リストボックスの幅は十分それ以上のスペースがあるのに、 走らせてみると水平スクロールバーが表示されており、 additemで“テキスト”と追加したはずのデータが、まるで“  テキスト  ”と前後に余計なスペースが混じっているような感じになってしまいます。 これは一体何が原因でしょうか? また、リストボックスにはスクロールバーに関するプロパティが見当たりませんが、そもそもスクロールバーを直接設定することはできないのでしょうか? よろしくお願いいたします。

  • アクセスVBA画面のスクロールバー

    アクセスVBAで画面を作っており、 あるフォーム画面に、あるサブフォーム画面を付けてます。 フォーム画面に条件を入力すると、サブフォーム画面に データが表示されます。 サブフォーム画面はデータが多くなると、 スクロールバーで上下に移動できるようにしてます。 今、フォーム画面で条件を入れると、サブフォーム画面は さほどデータが多くなくても スクロールバーの移動する枠がとても小さく表示されます (あたかもデータがたくさんあるように) 但し、その時に、スクロールバーをクリックしたりすると すぐに適切なスクロールバーの幅になります。 フォーム画面で条件を入れた直後に サブフォーム画面のスクロールバーの幅を適切にしたいのですが 何か、特別な設定とか必要なのでしょうか?

  • スクロールバーの境界値は?

    C# AutoScrollPositionで表示させたすスクロールバーの境界値を取得する方法は? AutoScrollで自動でフォームにスクロールバーが表示されるようにしました。 上下方向のスクロールの上限(バーが一番上)下限(バーが一番下)値を取得するにはどうしたらいいでしょうか? バーが一番上になる時の値は、0ですよね? バーが一番下になる時の値は、どのようにして取得すればいいでしょうか? 指導よろしくお願いいたします

専門家に質問してみよう