OpenArgs没有将变量传递给报告

时间:2015-04-06 06:42:12

标签: vba ms-access openargs

我对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的值作为发票编号。

我不确定我做错了什么,似乎无法在任何地方找到答案。 任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:0)

Dim InvoiceNum As Integer InvoiceNum = Me.OpenArgs

当您打开报告时,您正在声明一个名为InvoiceNum的变量,并将该变量的值设置为Open Args。我不确定你打算用那个变量做什么。如果您的目标是通过发票编号过滤发票,那么您应该尝试这样的事情......

me.filter = "[Invoice Number]= " & Me.OpenArgs

或者我认为发生的事情是您的表单上有一个未绑定的控件,其控件Source为InvoiceNum,并且您正在尝试将其值设置为OpenArgs。因为只要表单打开它就是一个未绑定的控件,它会给你一个参数框,因为InvoiceNum不是表格中的一个字段。如果我是正确的,这就是正在发生的事情,您可以尝试使用控件源中的=[OpenArgs]将控件源直接设置为Open Args,并从表单的OnLoad事件中删除所有代码。

答案 1 :(得分:0)

您是否肯定您的第一个表单上有一个名为[发票编号]的字段?如果是这样,在DoCmd.OpenReport代码行上放置一个断点,并使用您的立即窗口或鼠标悬停来确定InvoiceNum在该点的值。如果InvoiceNum不是您期望的,那么请尝试将字段[发票编号](个人,我从不在字段名称中使用空格,只会导致问题)重命名为其他内容并调整您的相应的代码。

如果InvoiceNum看起来正确,请在OpenArgs语句的Invoice报告中放置一个断点,并查看它在该点的值。看起来您的代码是合理的,但有些元素我们看不到可能会影响您的变量。

答案 2 :(得分:0)

感谢您的帮助。

我对代码进行了更多修改并在其中加入了断点。 事实证明问题不在于OpenArgs,就像我想的那样,而是我在报告中如何使用它。 我更改了文档字段,我将报告中的ID放入标签并使用:

InvoiceNum = Me.OpenArgs
    me.[label].caption = InvoiceNum

我没有在我的问题中添加原来的内容,因为我认为我已将其评论出来了。

现在完美运作。 再次感谢您的帮助。