web-dev-qa-db-ja.com

「DoCmd.GoToRecord」関数をサブフォームで機能させる

サブフォーム内の新しいレコードの作成と移動に(テーブルをソースとして)関数DoCmd.GoToRecord , , acNewRecを正常に使用しています。ただし、親フォームから同じことをしようとすると、これは機能しません。以下を含むさまざまなアプローチを試しました。

Me.sbfrm_subform.Controls("ctrName").SetFocus
DoCmd.GoToRecord , , acNewRec

コントロール(ctrName)にフォーカスを設定するだけで、新しいレコードへの追加と移動に失敗する、または

DoCmd.GoToRecord acDataForm, Me.sbfrm_subform.Form.Name, acLast

実行時エラー2489、「オブジェクト 'sbfrm_subformが開いていません」を返します。

11
Kambiz

コードをサブフォームに配置してから、親から呼び出してみてください。

サブフォームコード:

Sub GoToNewRecord()
     DoCmd.GoToRecord , , acNewRec
End Sub

親フォームコード:

Me.sbfrm_subform.GoToNewRecord
7
dennythecoder

操作を分割してみてください:

Me.[sbfrm_subform].SetFocus
DoCmd.GoToRecord, , acNewRec

または、サブフォームでパブリックSubを作成してみてください。これはフォームのメソッドになるため、それを使用できます。
これを最近のバージョンのAccessで使用すると、Me.Recordset.Movenextのように、フォームのレコードセットで直接再生することもできます。

10
Patrick Honorez

IDevlopが指摘したように、サブフォームのRecordsetオブジェクトを使用して、新しいレコードに移動できます。ただし、サブフォームにパブリックサブを作成する必要はありません。すべてをメインフォームから行います。

Me.[subform control name].SetFocus
Form_[subform form name].Recordset.AddNew

Form_ [フォーム名]構文を使用するには、フォームにVBAコードモジュールが必要です。フォームにフォームがなく、何らかの理由で空のフォームを作成することに反対する場合は、代わりにForms!MyForm.SubformControl.Form構文を使用できます。しかし、Form_ [Form Name]はより単純です。

4
Neil Ginsberg

メインフォーム「On Current」で次のイベントプロシージャを実行しました。

Private Sub Form_Current()
    Me.SubformName.SetFocus
    Me.SubformName.Requery
    RunCommand acCmdRecordsGoToLast
    DoCmd.GoToRecord , , acNewRec
    Scan.SetFocus
End Sub

DoCmdは、メインフォームが新しいレコードを開始するためのものです。それより前のすべては、サブフォームを最後のレコードに設定し、データが最新になるように再クエリすることです。

1
alinakb

私にとってうまくいったのは、レコードを表示するフォームで、希望するフィールドにフォーカスを設定し、レコードセットを設定することです。レコードセットを設定した後、レコードセットのAddNew関数を使用します。

Public Sub GoToNewRecord()
   Me.<myTextbox>.SetFocus

   Dim rcClone as Recordset
   Set rcClone = Me.Recordset

   rcClone.AddNew
End Sub
0
Private Sub anycotrl()
Me.yoursubformname_subform.SetFocus
DoCmd.GoToControl ("[anycontrolyouneed]")
DoCmd.GoToRecord , , acLast
End Sub
0
Osama Kadora

これは私が私の問題を解決した方法です...

メインフォーム名はFRM_Trader_WorkSheetです

サブフォーム名はFrm_Trader_Worksheet_Subです

メインフォームのオープンイベントでは、次のようにコーディングしました。

Private Sub Form_Open(Cancel As Integer)
  Me.Frm_Trader_Worksheet_Sub.SetFocus   
  DoCmd.GoToRecord , , acLast    
  DoCmd.GoToRecord , , acNext    
End Sub

メインフォームでデータ入力を行っていないため、メインフォームが開き、サブフォームの新しいレコードにフォーカスが移動します。必要に応じて前のレコードに戻ることができますが、メインフォームが読み込まれたときに新しいデータを入力する準備ができています。

そうは言っても、[データ]タブの下のサブフォームのプロパティを設定するだけで同じ結果を得ることができます。[データ入力= YES。唯一の違いは、以前のレコードにアクセスできなくなることです...

0
Daniel

答えは、次のいずれかの行を使用することです。

DoCmd.RunCommand acRecordsGotoNew
DoCmd.RunCommand acRecordsGotoNext
DoCmd.RunCommand acRecordsGotoPrevious
DoCmd.RunCommand acRecordsGotoFirst
DoCmd.RunCommand acRecordsGotoLast

何をしたいかによって異なります。機能的には、ナビゲーションボタンが表示されたままになっている場合、いずれかのボタンをクリックするのと同じです。

これらのいずれかを親フォームから呼び出す場合、最初に次の行を使用してサブフォームにフォーカスを設定する必要があります

Me.subform_name.SetFocus

残念ながら、レコードセット内の絶対位置にナビゲートするコマンドはないようです。これにより、一連の可能性が完成します。

0
Sean Hare