• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:【Access】サブフォーム間のカーソル移動がわからなくて困っています。)

【Access】サブフォーム間のカーソル移動がわからなくて困っています

このQ&Aのポイント
  • 2つのサブフォームがあり、サブフォーム間のカーソル移動を実現したいのですが、意図した動作にならず、困っております。
  • Form1_SUBのfield2でEnterキー押下時、同じ行のForm2_SUBのIDに移動したいです。下記のソースではForm2_SUBの最後のカーソル位置があった行のIDに遷移してしまいます。
  • Form2_SUBのfield2でEnterキー押下時、次の行のForm1_SUBのIDに移動したいです。下記のソースではForm1_SUBの最後のカーソル位置があった行のIDに遷移してしまいます。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

チラッとやってみただけなので、おかしかったら修正していってください。 切り替えを親フォームを経由して行う方法となります。 【F1_SUBのソース】サブフォームコントロール名を「サブ1」とします Private Sub field2_KeyDown(KeyCode As Integer, Shift As Integer)   Select Case KeyCode     Case vbKeyReturn       KeyCode = 0       Call Me.Parent.Form1To2   End Select End Sub 【F2_SUBのソース】サブフォームコントロール名を「サブ2」とします Private Sub field2_KeyDown(KeyCode As Integer, Shift As Integer)   Select Case KeyCode     Case vbKeyReturn       KeyCode = 0       Call Me.Parent.Form2To1   End Select End Sub 【OYAFORMのソース】 Private Sub ChangeForm(ctlFrom As SubForm, ctlTo As SubForm, iAddPos As Integer)   Dim iFromPos As Long   With ctlFrom.Form     If (.NewRecord) Then       iFromPos = .Recordset.RecordCount     Else       iFromPos = .Recordset.AbsolutePosition     End If   End With   iFromPos = iFromPos + iAddPos   With ctlTo     .SetFocus     With .Form       If (iFromPos < .Recordset.RecordCount) Then         .Recordset.AbsolutePosition = iFromPos       Else         .Recordset.AddNew       End If       .ID.SetFocus     End With   End With End Sub Public Sub Form2To1()   Call ChangeForm(Me.サブ2, Me.サブ1, 1) End Sub Public Sub Form1To2()   Call ChangeForm(Me.サブ1, Me.サブ2, 0) End Sub ※ Enterが押されたフォームは何行目を表示していたかを求め、 移行する時の+何行目を加算しておき、 以降先のレコード数により位置を指定するか、新規にいくか で、最後にIDへフォーカス設定 ※ IDの値が同じかどうかは見ていません。行だけ ※ サブ1, サブ2 は、OYAFORM に配置したサブフォームコントロールの名前です。

iroha_168
質問者

お礼

ご回答ありがとうございます。 意図した動作をしている事を確認しました。 ソースの中身についても一通り理解できたと思います。 なお、私は下記のように改造しましたが、特に問題なく動いているようでした。 1. 新規レコードは作らない。 2. 移動先のフィールド名は、サブフォーム毎に異なる。 3. 最後のサブフォームの最後の行では親フォームに戻ってくる。 4. 3つ以上のサブフォームに対応。 それと、IDの値を見ていない件ですが、 IDの同期は別途とっており、同じ行=同じIDとなるので、 その点については大丈夫です。 おかげで無事解決しました。 どうもありがとうございました。 以上、よろしくお願いします。

関連するQ&A

専門家に質問してみよう