0

私が欲しい:

フォームを開くには、コントロール ボックスから項目を選択し、ボタンをクリックして新しいフォームを開き、以前に選択した項目がフィールドに追加された新しいレコードを入力できるようにします。

私がこれまでに行ったこと:

2 つのフォームを作成し、両方にコントロールを追加し、コマンド ボタンを追加しました。MS Access ウィザードを使用して、このコードを追加しました。

Private Sub CommandNext_Click()
  On Error GoTo Err_CommandNext_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "FormX"
    DoCmd.OpenForm stDocName, , , "[BatchID] = " & Me![ListBatch], acFormAdd

  Exit_CommandNext_Click:

    Exit Sub

  Err_CommandNext_Click:

    MsgBox Err.Description
    Resume Exit_CommandNext_Click

End Sub

3行目は私のです。

結果として:

  • 2 番目のフォームまだ開いていない場合、最初のフォームのボタンを押すと、データが空の 2 番目のフォームが開きます (パラメーターの値を表示するテキスト フィールドは空です)。
  • 2 番目のフォーム既に開いている場合、最初のフォームのボタンを押すと、フォーカスが 2 番目のフォームに変わり、選択したパラメーターに一致する古い既存のレコードが表示されます。
  • 古いレコードを表示せずに、指定したテキスト フィールドに選択したパラメータを表示して 2 番目のフォームを開きたいです。

どちらの場合も、2 番目のフォームのFilterプロパティには、ボタンを使用して送信したパラメーターが取り込まれますが、それは私が目指しているものではありません。

4

1 に答える 1

2

open form コマンドの 4 番目の引数が、適用する場所の条件またはフィルターであることをご存知ですか?

オープン引数 (OpenArgs) と呼ばれる最後のパラメーターを使用すると、2 番目のフォームのオープン イベントにコードを記述して、問題の列のデフォルト値を設定できます。

オープン フォームのコードは次のようになります。

DoCmd.OpenForm stDocName, , , , acFormAdd, , Me![ListBatch]

次に、この 2 番目のフォームを開くイベントに次のようなコードを配置できます。

Dim defaultID as Long
defaultID = CLng(Nz(Me.OpenArgs, 0))
If defaultID = 0 Or IsNull(Me.OpenArgs) Then
    Cancel = True
    Exit Sub
End If
Me.TextBoxBatchID.DefaultValue = defaultID

または、新しいレコードごとに ID を設定する必要がない場合は、コントロールの現在の値を defaultID 変数に設定するだけです。

 Me.TextBoxBatchID = defaultID

open 引数が空または 0 であることが判明した場合、上記のコードはフォームを開かないことに注意してください。

于 2012-06-20T20:46:41.873 に答える