Vba 从报告中打开表单
我在一个模块中的两个不同VBA函数中有以下代码行,它们都有相同的目标,即打开一个表单以获取特定记录Vba 从报告中打开表单,vba,ms-access,Vba,Ms Access,我在一个模块中的两个不同VBA函数中有以下代码行,它们都有相同的目标,即打开一个表单以获取特定记录 stLinkCriteria = "[ID]=" & Reports![Rpt_Manufacture].[ID] DoCmd.OpenForm stDocName, , , stLinkCriteria 及 如何更改此设置,使我只能从报表或表单调用一个函数,并将表单打开到特定记录。我已经试过了!但我得到了一个“无效使用我的关键字”,我猜这是因为我不能从模块中使用它 更新#1 根据下面T
stLinkCriteria = "[ID]=" & Reports![Rpt_Manufacture].[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()。确保
您已经保存了它,并且输入正确
在sub中传递表单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
请注意,您可能需要对其进行一些调整,因为我不知道确切的上下文。也许你有一个子表单,所以你应该传递主表单
但想法是存在的
更新以下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
这不适用于报表,只适用于表单。您可能需要调整它,使其同时适用于这两种情况。另外,
Open\u Report
对于一个只打开表单的sub来说是一个糟糕的名字。我完全同意这个糟糕的名字:)至于其余的,我缺少了一些上下文来让它在所有情况下都能工作……正如我说的,我刚刚给出了这个想法!如果你用Object
而不是Form
作为你的论点,它只会对我有用think@ErikvonAsmuth这里是yago,加上一个类型检查:)呃。。。在传递参数时,您需要实际使用VBA。。。您几乎不应该将按钮指定给UDF,而是始终添加调用UDF@ErikvonAsmuth我为调用CmdOpenProductDetails UDF的代码创建了一个单击事件,但现在我收到一条“参数非可选”消息,您应该将Me
作为参数传递…我尝试了“Private Sub-ProductID\u click(Me)”但我得到了一个预期的标识符错误。您可能需要阅读VBA教程。这不是将参数传递给sub的方式,也是无效的。你应该像Open\u Form Me
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