• ベストアンサー

Accessで、サブフォームのあるフォーム内をEnterキーで移動したい

いつもお世話になっております。 質問させてください。m(_ _)m Accessで、サブフォームのあるフォームを作成すると、同一フォーム内のフィールド移動は「Enter」で動きますが、フォーム間の移動は「Ctrl+tab」になります。 画面に表示されているフィールド間全部を(サブフォームであってもなくても関係なく)「Enter」キーのみで移動していく方法はありますか? あればその方法を教えてください。 移動順序も変えられたらありがたいです。 よろしくお願いします。

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

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> 移動順序も変えられたらありがたいです。 タブ移動順のことでしたら、プロパティシートで指定できます。  1)フォームをデザインビューで開く   (Access2000以降ならフォームビューでも可)  2)右クリックメニューなどでプロパティシートを開く  3)コントロールのどれかを選択  4)「その他」タブの「タブ移動順」にカーソルを移動させ、右端に表示される   「...」をクリック  5)「タブオーダー」ダイアログが表示されるので、クリック&ドラッグで各コント   ロールの移動順序を編集(詳細/ヘッダ/フッタでそれぞれ別なので注意)  6)「OK」をクリックして「タブオーダー」ダイアログを閉じる  7)フォームを保存 ・・・以上です。 (上記の方法ではなく、数字自体を編集すると変な結果になることがあるので  注意して下さい)   ------------------------------ > 画面に表示されているフィールド間全部を(サブフォームであってもなくても > 関係なく)「Enter」キーのみで移動していく方法はありますか? 残念ながら、私の知っている範囲では、その方法は用意されていません。 なので、自作するしかありません。 で、自作するにしても、  A)FunctionまたはSubとして用意して使い回し  B)フォーム毎に個別でコード作成 の2通りの対応がありますが、「A」の方法は色々と考えなければならないことが 多すぎて、かなり厳しいです。 (例えば、ヘッダ/フッタの有無、レコード移動の可否(連結/非連結フォームの  切り分け)、新規レコードの表示の有無(メインフォームに戻るのは最後の  レコードの時か新規レコードの時か)・・・等を判定するコードが必要) なので、当面はフォーム個別で対応されることをお薦めします。 方法の一例としては・・・メインフォーム・サブフォームにフォーカスを飛ばすための コントロールを設置する、という方法があります。 例えばフォームの構成が  メインフォーム;フォーム名=MF   TB1,TB2(テキストボックス),SF1(サブフォーム),Cmd1,Cmd2(コマンドボタン)  サブフォーム;フォーム名=SF (SF1のソースオブジェクト)   Tx1,Tx2,Tx3(テキストボックス) だったとします。 メインフォームに「Prv」「Nxt」、サブフォームに「Rtn」「Ext」というコントロール (例えばオプションボタン等)を設置し、それぞれのタブ移動順を、  メインフォーム ; TB1→TB2→Prv→SF1→Nxt→Cmd1→Cmd2  サブフォーム ; Rtn→Tx1→Tx2→Tx3→Ext となるように設定します。 そうしたら、メインフォームの「Prv」「Nxt」の「フォーカス取得後」イベントに 以下のコードを記述します; Private Sub Prv_GotFocus()  '「→」「Tab」キー等で移動時 On Error GoTo エラー処理 'サブフォームの先頭レコードに移動 SF1.SetFocus   With SF1.Form !Tx1.SetFocus DoCmd.GoToRecord , , acFirst End With 終了処理: Exit Sub エラー処理: MsgBox Err & ":" & Error$, , Me.Name & " Prv" Resume 終了処理 End Sub Private Sub Nxt_GotFocus()  '「←」「Shift+Tab」等で移動時 On Error GoTo エラー処理 'サブフォームの新規レコードに移動 SF1.SetFocus With SF1.Form !Tx3.SetFocus DoCmd.GoToRecord , , acNewRec End With 終了処理: Exit Sub エラー処理: MsgBox Err & ":" & Error$, , Me.Name & " Nxt" Resume 終了処理 End Sub 次に、サブフォームの「Rtn」「Ext」の「フォーカス取得後」イベント; Private Sub Ext_GotFocus()  '「→」「Tab」キー等で移動時 On Error GoTo エラー処理 '新規レコードの場合はメインフォームに戻る If Me.NewRecord Then Tx3.SetFocus Me.Parent!Cmd1.SetFocus Else Tx1.SetFocus DoCmd.GoToRecord , , acNext End If 終了処理: Exit Sub エラー処理: MsgBox Err & ":" & Error$, , Me.Name & " Ext" Resume 終了処理 End Sub Private Sub Rtn_GotFocus()  '「←」「Shift+Tab」等で移動時 On Error GoTo エラー処理 '先頭レコードの場合はメインフォームに戻る If Me.CurrentRecord = 1 Then Tx1.SetFocus Me.Parent!TB2.SetFocus Else Tx3.SetFocus DoCmd.GoToRecord , , acPrevious End If 終了処理: Exit Sub エラー処理: MsgBox Err & ":" & Error$, , Me.Name & " Rtn" Resume 終了処理 End Sub さらに、サブフォームの「開くとき」イベント; Private Sub Form_Open(Cancel As Integer) On Error GoTo エラー処理 Tx1.SetFocus 終了処理: Exit Sub エラー処理: MsgBox Err & ":" & Error$, , Me.Name & " Open" Resume 終了処理 End Sub ・・・以上です。 なお、「Rtn」等のコントロールはクリックした場合も同じ動作をするので、 他のコントロールと重ねた上で、メニューで「書式(O)→最背面に移動(K)」 として、ユーザーの目から隠しておくことをお薦めします。

xchoxcho
質問者

お礼

お礼が遅くなりまして、大変失礼致しました。 非常に丁寧なご回答、本当にありがとうございました。 少し難しそうですが、挑戦してみたいと思います。 不明な点がありましたら、補足させていただくかもしれませんので、まだ質問は締め切りませんが・・・ ありがとうございました。

関連するQ&A

  • アクセスのサブフォームからメインフォームへキーで切り替えをする

    何度もお世話になっております。m(_ _)m アクセスのフォームで、サブフォームを作成しています。 EnterキーまたはTabキーで、フォームの中を進んでいくと、メインフォームのフィールドからサブフォームのフィールドへ進みます。 この進む順番は、タブオーダーで設定できるので問題ないのですが、 サブフォームの情報を入力し終えて、メインフォームへカーソルを飛ばしたい場合、どうすればいいのでしょうか? そのままEnterやTabを押しても、サブフォームの中の新規レコードが追加されるだけです。 自分でキーなどを設定できるのであれば、なおさら良いのですが・・・ とりあえず、基本的な操作方法として、サブフォームからメインフォームへ移るキーを教えてほしいです。 よろしくお願いします。

  • アクセスのサブフォームからメインフォームヘEnterキーで移動したい!!

    アクセス2000でメインフォームにサブフォーム(クエリ)を埋め込みました。 メインフォームからEnterキーを押すと、 サブフォームにクエリーの結果が表示されます。 ところが、その後、いくらEnterキーを押してもカーソルがメインフォームへ戻りません・・・ 「マウスでクリックせずに、Enterキーでメインフォームへ戻りたい!!」 埋め込んだサブフォームのプロパティ・タブストップを「いいえ」にすると、 クエリーの結果は出てこない、どうしたらいいのでしょう。。。教えて下さい!!!!

  • ACCESS2000のメインフォームサブフォーム間の移動

    Access2000でメインフォームの中に詳細を確認/入力するためのサブフォームを作成しています。 メインフォームの中のコントロールを最後まで入力(enterで移動)していくと、メインフォームの最後のコントロールの次はサブフォームの最初のコントロールに移動します。(これは普通ですよね?) サブフォームはデータの詳細によっては1レコードで終わるものもありますし、複数レコードにわたるものもあります。 サブフォームの入力が終了したときに、キー操作でメインフォームの次のレコードの頭のコントロールに移動する事はできますか? マクロをAccessの方から設定するくらいならできるのですが、自分でSQLをうんぬんする知識はありません。 よい方法があったら教えてください。

  • Access フォーム タブオーダー

    サブフォーム付のフォームを作成しましたが、主フォームから サブフォームに移動する最、移動位置が正しくないのですが この設定はどのようにするのでしょうか? フォームの最後のボックスから移動した場合 サブフォームの先頭レコードの最後のフィールドに移動してしまいます。 最後から三番目のフィールドに移動させたいです。 タブオーダでEnterやTabキーで移動場所の設定はできますが 矢印キーで自由に移動できるように設定できないのでしょうか?

  • Accessのサブフォームで、次のレコードに移動させない方法

    いつも大変お世話になっております。m(_ _)m Accessのフォームで(特にサブフォーム)で、表示されているフィールド間はEnterで進んでもいいのですが、次のレコードに移らないように設定できますか? サブフォームなどで、次のレコードに進むと、画面上は白紙のフィールドが用意され、データが消えたように感じます。 それを防ぎたいのですが・・・ プロパティ内の設定などでまかなえるでしょうか? よろしくお願い致します。

  • Accessのサブフォームについて

    メインフォームとサブフォームのあるフォームを作成しました。メインフォームを入力してから、サブフォームを入力し、次のレコードへ移動するのにメインフォームの移動ボタンを押すと、次のレコードのカーソルがサブフォームのフィールドへ移動します。メインフォームに移動する方法はありませんか?

  • Enterキーでフォームの入力フィールド移動をしたい

    フォームの入力項目間の移動を行うのに、普通はTABキーを使うよう なのですが、Enterキーで移動して、送信ボタンまで来たら、それ もEnterキーで送信という動作にしたいと思います。 しかし、入力項目のところでEnterキーを押すと、次の項目へ移動 するのではなく、送信ボタンが押されてしまいますよね? そうさせずに、上記のような動作をさせるにはどうすれば良いのでしょ うか? 同じような質問をどこかで見たような気がしたのですが、見つ けることができませんでした。よろしくお願いします。

  • サブフォームからメインフォームのフィールドにエンターキーで移動したい

    ACCESS2000です。 フォームの中にサブフォームを作っています。 入力される都合で、フォームの中途にサブフォームがあります。このサブフォームのレコードの数は固定しています。(今は19です) サブフォームは帳票形式です。 サブフォームの最後のレコードでエンターキーやTABキーが押された時、メインフォームの指定するフィールドに移動するには、どうすれば良いでしょう。 使用者に特殊なキー操作を強要したくないので、VBAで記述したいのですが。

  • Access2007でのEnterキーについて質問です。

    Access2007でのEnterキーについて質問です。 フォームにテキストボックスを20個ほど置いているのですが、 Enterキーでフォーカスが移動しません。 会社と自宅と両方で作成しているのですが、会社はAccess2000です。 会社でタブオーダーを設定して、会社ではキチンと動作していたのですが、 自宅のAccess2007ではEnterキーが動作しません。 何が原因しているのでしょうか? 対策等アドバイスよろしくお願いします。 m(_ _)m

  • Accessのサブフォーム

    Access2000です。 フォームを作成し、ツールボックスより「サブフォーム/サブレポート」をクリックしてサブフォームを配置しました。 イベントがEnterとExitしかないやつです。 検索するとサブフォームのテキストボックスが・・・とかあるのですが、何の事やら?です。 この、配置したサブフォームと検索すると色々ヒットするサブフォームは別物なのでしょうか? このシンプルなサブフォームのソースオブジェクトにテーブルを指定して表示させています。 リンク子フィールドやリンク親フィールドは未設定です。 使い方が間違っているでしょうか? このサブフォームの使い方がイマイチよく分かりません。 検索しても前述のように存在しないイベント(?)等の説明でさっぱりです。 分かりやすくどなたかお願いします。。。

専門家に質問してみよう