0

我对 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 的值成为表单中的发票编号。

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

4

3 回答 3

0

您确定您的第一个表单上有一个名为 [Invoice Number] 的字段吗?如果是这样,请在 DoCmd.OpenReport 代码行上放置一个断点,然后使用您的即时窗口或鼠标悬停来确定 InvoiceNum 在该点的值。如果 InvoiceNum 不是您所期望的,请尝试将字段 [Invoice Number] 重命名(就我个人而言,我从不在字段名称中使用空格,这只会导致问题)并相应地调整您的代码。

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

于 2015-04-06T16:59:53.943 回答
0

Dim InvoiceNum As Integer InvoiceNum = Me.OpenArgs

当您打开报表时,您声明了一个名为 InvoiceNum 的变量并将该变量的值设置为 Open Args,这看起来有些不对劲。我不确定您打算如何处理该变量。如果您的目标是按发票编号过滤发票,那么您应该尝试这样的事情......

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

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

于 2015-04-06T07:46:09.710 回答
0

谢谢你们的帮助。

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

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

我没有将我最初的问题添加到我的问题中,因为我认为我已经将其注释掉了。

现在完美运行。再次感谢你的帮助。

于 2015-04-07T10:56:19.643 回答