11

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 が開かれていません。」が返されます。

4

9 に答える 9

11

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

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

または、サブフォームにパブリック Sub を作成してみると、フォームのメソッドになるので、それを使用できます。
最近のバージョンの Access でこれを使用すると、代わりにフォームのレコードセットを直接操作してみることができます Me.Recordset.Movenext

于 2013-06-27T15:46:16.760 に答える
9

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

サブフォームコード:

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

親フォーム コード:

Me.sbfrm_subform.GoToNewRecord
于 2013-06-27T15:48:18.417 に答える
5

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

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

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

于 2016-03-07T10:51:34.760 に答える
2

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

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

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

于 2016-09-05T03:35:24.517 に答える
0

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

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

やりたいこと次第。これは、ナビゲーション ボタンが表示されたままになっている場合、そのボタンをクリックするのと機能的に同じです。

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

Me.subform_name.SetFocus

残念ながら、一連の可能性を完成させる、レコードセット内の絶対位置に移動するコマンドはないようです。

于 2018-08-07T05:05:29.240 に答える