• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでフォームのスクロールバーが下にいってしまう)

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

このQ&Aのポイント
  • VBAを使用して縦に長いフォームを作成していますが、フォームビューで開くとフォームが下部に表示されてしまいます。スクロールバーを最上部に戻す方法や、レコードをセットする方法について教えてください。
  • VBAを使用して縦に長いフォームを作成していますが、フォームビューで開くとフォームが下部に表示されてしまいます。スクロールバーを最上部に戻す方法や、レコードをセットする方法についてご教示ください。
  • 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