1

ボタンをクリックして 2 番目のフォームを開いた後、フォーム 1 のフィールド ReportID (数値フィールド) から Budget_fsub というフォームのフィールド ReportID に値を渡そうとしています。このコードを試して値を 2 番目のフォームに渡してみましたが、機能しているように見えますが、2 番目のフォームの値を保持するテーブルに移動すると、値が記録されていません。私は何を間違っていますか?

Form1 と form2 を開くボタン:

Private Sub cmdEnterBudgetInfo_Click()

On Error GoTo Err_EnterBudgetInfo_Click

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "Budget_fsub"
    DoCmd.OpenForm stDocName, , , , acFormAdd, , Me![ReportID]

Exit_cmdEnterBudgetInfo_Click

    Exit Sub

Err_EnterBudgetInfo_Click:

    MsgBox Err.Description
    Resume Exit_cmdEnterBudgetInfo_Click

End Sub

Budget_fsub フォームのコードは次のとおりです。

Private Sub Form_Open(Cancel As Integer)

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.ReportID.DefaultValue = defaultID

End Sub
4

1 に答える 1

0

したがって、ここに実用的なソリューションがあります。フォームがバインドされており、ReportID テキストボックスが列にバインドされていると仮定します。注意してください、私はデータを操作するためにマクロを使用するのが好きではありませんでした..

Form1 のコードは次のとおりです。

Private Sub cmdEnterBudgetInfo_Click()
On Error GoTo Err_EnterBudgetInfo_Click

Dim stDocName As String
Dim stLinkCriteria As String

stDocName = "Budget_fsub"
'close the form first
DoCmd.Close acForm, stDocName, acSaveYes

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

Exit_cmdEnterBudgetInfo_Click:

    Exit Sub

Err_EnterBudgetInfo_Click:

    MsgBox Err.Description
    Resume Exit_cmdEnterBudgetInfo_Click

End Sub

サブフォーム (Budget_fsub) のコードは次のとおりです。

Option Compare Database
Option Explicit

'global variable
Dim repID As Long

'form load event
Private Sub Form_Load()

Me.ReportID.Value = repID

DoCmd.RunCommand acCmdSave

End Sub


'form open event
Private Sub Form_Open(Cancel As Integer)

SetReportID

If repID = 0 Then
    Cancel = True
    Exit Sub
End If

End Sub


'function to set reportID from the openargs
Private Function SetReportID()

repID = CLng(Nz(Me.OpenArgs, 0))

End Function

お役に立てれば。

于 2012-11-30T21:31:18.687 に答える