我在模块中的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()。确保 你保存了它并且你已经正确输入了它。
答案 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