我不知道如何用宏来做到这一点。我从不使用宏——你可以做宏用 vba 做的所有事情——而且很简单:
Private Sub ReportOpenButton_Click()
On Error GoTo Err_ReportOpenButton_Click
If Not Me.NewRecord Then
DoCmd.OpenReport "My_Reportname", acPreview, , "[ID] = " & Me![ID]
Else
If MsgBox("Save the new Record ?", vbQuestion & vbOKCancel, "Attention") = vbOK Then
RunCommand acCmdSaveRecord
DoCmd.OpenReport "Bericht1", acPreview, , "[ID] = " & Me.ID
End If
End If
Exit_ReportOpenButton_Click:
Exit Sub
Err_ReportOpenButton_Click:
MsgBox Err.Description
Resume Exit_ReportOpenButton_Click:
End Sub
这里重要的部分是:[ID] 是报告中 ID 字段的名称,Me![ID] 是执行此命令的表单中的 id 字段的名称(me)。所以最后一个参数 "[ID] = " & Me![ID] 意味着,字符串 "[ID =" 和我的表单的字段 id 中的数字将连接到例如 "[ID] = 7"。
所以该行执行一个宏,读取
OpenReport my_reportname, inPreviewMode, ID = 7
编辑:添加了一些代码来保存当前记录,如果它是新的