OpenArgs 未将变量传递给报告
Posted
技术标签:
【中文标题】OpenArgs 未将变量传递给报告【英文标题】:OpenArgs not passing variable to report 【发布时间】:2015-04-06 06:42:12 【问题描述】:我对 VBA 很陌生,我正在尝试在发票创建表单上创建一个按钮来打印发票。按钮的 On Click 事件应打开一个报表并将表单上的 Invoice ID 分配给 openargs 属性。
Private Sub cmdPrint_Click()
Dim InvoiceNum As Integer
If Me.Dirty Then 'Save any edits.
Me.Dirty = False
End If
If Me.NewRecord Then 'Check there is a record to print
MsgBox "Select a record to print"
Else
InvoiceNum = Me.[Invoice Number]
DoCmd.OpenReport "Invoice", acViewPreview, , , , InvoiceNum
End If
End Sub
然后当报表打开时,它会运行代码:
Dim InvoiceNum As Integer
InvoiceNum = Me.OpenArgs
但是,当我单击表单上的按钮时,会出现输入参数框。奇怪的是,此框中的文本是我要分配给 OpenArgs 属性的发票编号的值。我不知道如何使 OpenArgs 的值成为表单中的发票编号。
我不确定我做错了什么,似乎无法在任何地方找到答案。 任何帮助将不胜感激。
【问题讨论】:
它必须工作,所以其他事情正在发生。 1:在打开报表时引发的 OnLoad 和其他事件中查找代码。 2:尝试重命名变量。 3:尝试使用:InvoiceNum = Me![Invoice Number].Value 【参考方案1】:Dim InvoiceNum As Integer
InvoiceNum = Me.OpenArgs
当您打开报表时,您声明了一个名为 InvoiceNum 的变量并将该变量的值设置为 Open Args,这看起来有些不对劲。我不确定您打算如何处理该变量。如果您的目标是按发票编号过滤发票,那么您应该尝试这样的事情...
me.filter = "[Invoice Number]= " & Me.OpenArgs
另外,我认为正在发生的事情是,您的表单上有一个未绑定的控件,其控件 Source 为 InvoiceNum
,并且您正试图将其值设置为 OpenArgs。因为它是一个未绑定的控件,只要表单打开它就会给你一个参数框,因为InvoiceNum
不是表格上的一个字段。如果我是正确的并且这是正在发生的事情,您可以尝试通过在 Control 源中使用 =[OpenArgs]
并从表单的 OnLoad 事件中删除所有代码,将其 Control Source 直接设置为 Open Args。
【讨论】:
【参考方案2】:您确定您的第一个表单上有一个名为 [Invoice Number] 的字段吗?如果是这样,请在 DoCmd.OpenReport 代码行上放置一个断点,然后使用即时窗口或鼠标悬停来确定 InvoiceNum 在该点的值。如果 InvoiceNum 不是您所期望的,请尝试将字段 [Invoice Number] 重命名(就我个人而言,我从不在字段名称中使用空格,这只会导致问题)并调整您的相应地编码。
如果 InvoiceNum 看起来正确,请在您的 Invoice 报告中的 OpenArgs 语句中放置一个断点,然后查看它认为该点的值是什么。看起来您的代码是正确的,但是有些我们看不到的元素可能会影响您的变量。
【讨论】:
【参考方案3】:感谢你们的帮助。
我对代码进行了更多修改,并在其中设置了断点。 结果发现问题不在于我想的 OpenArgs,而在于我在报告中如何使用它。 我将我在报告中放入 ID 的文本字段更改为标签并使用:
InvoiceNum = Me.OpenArgs
me.[label].caption = InvoiceNum
我没有将我最初的问题添加到我的问题中,因为我认为我已经将其注释掉了。
现在完美运行。 再次感谢您的帮助。
【讨论】:
以上是关于OpenArgs 未将变量传递给报告的主要内容,如果未能解决你的问题,请参考以下文章
MS Access 2007 - OpenArgs 没有将值传递给下一个表单?