从报告中打开表格

时间:2018-04-30 09:42:06

标签: vba ms-access

我在模块中的2个不同的VBA函数中有以下代码行,它们的目的是将表单打开到特定记录;

stLinkCriteria = "[ID]=" & Reports![Rpt_Manufacture].[ID]
DoCmd.OpenForm stDocName, , , stLinkCriteria

stLinkCriteria = "[ID]=" & Forms![frmManufactureList]![frm_Products].[ID]
DoCmd.OpenForm stDocName, , , stLinkCriteria

如何更改此设置,以便我只能从报表或表单中调用一个函数,它会将表单打开到特定记录。我试过了我!报告上的版本,但我得到了“无效使用我的关键字”,我猜是因为我无法在模块中使用它。

更新#1 根据Thomas G的以下答案,我使用了这段代码;

Option Compare Database

Public Function CmdOpenProductDetails(ByRef theObject As Object)
On Error GoTo Err_CmdOpenProductDetails

    Dim stDocName As String
    Dim stLinkCriteria As String

    stDocName = "FrmProductDetails"

    stLinkCriteria = "[ProductID]=" & theObject![ProductID]
    DoCmd.OpenForm stDocName, , , stLinkCriteria

Exit_CmdOpenProductDetails:
    Exit Function

Err_CmdOpenProductDetails:
    MsgBox Err.Description
    Resume Exit_CmdOpenProductDetails

End Function

从产品名称的表单和报告中,我有一个读取的onClick事件;

=CmdOpenProductDetails()

但是,如果我在表单上单击产品名称,则会收到错误消息;

  

您输入的快速单击作为事件属性设置   产生了以下错误。您输入的表达式有一个   函数包含错误数量的参数。 (表达可能   不会导致宏,UDF或事件过程的名称(可能有   评估函数时出错了。

如果我从报告中点击,我会收到错误消息;

  

MS Access无法找到对象'CmdOpenProductDetails()。确保   你保存了它并且你已经正确输入了它。

1 个答案:

答案 0 :(得分:1)

将表格byref传递给子

类似

Public Sub Open_Form(ByRef theForm As Form)

    Dim stLinkCriteria As String

    stLinkCriteria = "[ID]=" & theForm![ID]
    DoCmd.OpenForm theForm, , , stLinkCriteria

End Sub


Private Sub TestIt()

        Open_Form Forms![frmManufactureList]![frm_Products]

End Sub

请注意,您可能需要稍微调整一下,因为我不知道确切的上下文。也许你有一个子表单,所以你应该传递mainform

但想法是

更新以下Erik提案:

您可以将表单或报表作为对象传递,以使其适用于

Public Sub Open_Form_or_Report(ByRef theObject As Object)

    Dim stLinkCriteria As String


    stLinkCriteria = "[ID]=" & theObject![ID]


    If TypeOf theObject Is Form Then

        DoCmd.OpenForm theObject , , , stLinkCriteria

    ElseIf TypeOf theObject Is Report Then
        DoCmd.OpenReport theObject , , , stLinkCriteria

    Else
        MsgBox "Error :  the type should be a Form or a Report"

    End


End Sub


Private Sub TestIt()

        Open_Form_or_Report Forms![frmManufactureList]![frm_Products]

End Sub