「覚え間違い」を教えてください!

いつもお世話になっております。
質問させてください。m(_ _)m

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

よろしくお願いします。

A 回答 (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)」
として、ユーザーの目から隠しておくことをお薦めします。
    • good
    • 0
この回答へのお礼

お礼が遅くなりまして、大変失礼致しました。

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

ありがとうございました。

お礼日時:2007/06/08 16:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A