Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba Access 2007使用宏填充报告_Vba_Ms Access_Report - Fatal编程技术网

Vba Access 2007使用宏填充报告

Vba Access 2007使用宏填充报告,vba,ms-access,report,Vba,Ms Access,Report,我有一个学生申请数据库,其中有一个表单,包含每个申请的信息 我想从表单中创建一个报告(我不确定是否应该使用宏或命令按钮),但它应该做的是单击后,它应该创建一个报告,其中只包含表单上显示的当前应用程序的信息 我创建了一个如下所示的报告: 为了创建宏(当单击宏以打印预览模式打开报告时),我在宏设计中的where框下使用了以下条件:[应用程序]![记录ID]=[表格]![表格]![记录ID] 但是,当我单击表单上的宏时,它会显示报告,但不会使用表单中的数据填充报告中的字段 我要问的问题是,人们通常如

我有一个学生申请数据库,其中有一个表单,包含每个申请的信息

我想从表单中创建一个报告(我不确定是否应该使用宏或命令按钮),但它应该做的是单击后,它应该创建一个报告,其中只包含表单上显示的当前应用程序的信息

我创建了一个如下所示的报告:

为了创建宏(当单击宏以打印预览模式打开报告时),我在宏设计中的where框下使用了以下条件:[应用程序]![记录ID]=[表格]![表格]![记录ID]

但是,当我单击表单上的宏时,它会显示报告,但不会使用表单中的数据填充报告中的字段

我要问的问题是,人们通常如何在表单上创建一个按钮,一旦单击该按钮,就会显示一个打印预览,其中包含该表单中包含的信息(而不是多条记录)

谢谢


Tom

应该像这样简单(在VBA中,而不是宏中):


作为旁注,在设计表时,最好不要在字段名中使用空格或符号。我会将记录ID更改为记录ID。

应该像这样简单(在VBA中,而不是宏中):


作为旁注,在设计表时,最好不要在字段名中使用空格或符号。我会将记录ID更改为记录ID。

我不知道如何使用宏执行此操作。我从不使用宏-你可以用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


编辑:添加了一些代码以保存当前记录(如果它是新的)

我不知道如何使用宏来执行此操作。我从不使用宏-您可以使用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


编辑:添加一些代码以保存当前记录(如果它是新的)

发布后我看到了HK1的答案-因此这是重复的,他的帖子更好;)因此,如果我添加您的代码,它还会在表单上创建一个按钮吗?还是我应该手动创建一个按钮?在没有向导的情况下创建一个按钮。将其OnClick事件设置为EventProcedure(不知道确切的术语,因为我有德语版的access。)您也可以在已有的按钮中更改它。access将创建一个…_Click()过程,就像我上面写的那样。我的按钮称为ReportOpenButton,因此该过程为ReportOpenButton_Click()-如果您的按钮名为Btn1,则将上述代码中的所有ReportOpenButton也更改为Btn1,最好检查是否已像建议的HK1那样保存日期集(如果是me.newrecord…)并且可能会通知用户为什么什么都没发生-我相应地更改了上述代码-非常感谢@HK1Thanks的所有帮助,我将尝试建议的解决方案,看看效果如何。请继续关注!发布后,我看到了HK1的答案-因此这是一个副本,他的帖子更好;)因此,如果我添加您的代码,它还会在表单上创建按钮吗?或者我应该手动创建按钮吗?在不使用向导的情况下创建按钮。将其OnClick事件设置为EventProcedure(不知道确切的术语,因为我有德语版的access)。您也可以在已有的按钮中更改它。access将创建一个…\u Click()我的按钮被称为ReportOpenButton,因此这个过程是ReportOpenButton_Click()-如果你的按钮被称为Btn1,那么把上面代码中的所有ReportOpenButton都改为Btn1。同样,检查是否已经像HK1建议的那样保存了一个日期集是一个好主意(如果me.newrecord…)也许会通知用户为什么什么都没发生-我相应地更改了上面的代码-谢谢@HK1Thanks非常感谢您的帮助,我将尝试建议的解决方案,看看效果如何。请继续关注!