【问题标题】:Microsoft Access 2000 VBA微软Access 2000 VBA
【发布时间】:2013-10-31 14:29:50
【问题描述】:

我在访问 vba 中有一个查询,我正在循环访问,结果是一个属性的名称,我想用这个名称打开一个报告,该报告使用一个参数是属性名称的查询。循环很好,我遇到的问题是将该参数传递给循环中的报告。我尝试了一些事情,但无济于事,我不断收到一条消息以手动传递参数。该循环基本上将通过电子邮件附件向财产的每个所有者发送报告。当我在没有循环的情况下一一进行报告时,它工作正常,但在循环中,它似乎没有拾取属性名称。

【问题讨论】:

  • 您是否在查找属性名称,然后尝试循环访问属性所有者,向每个所有者发送相同的报告?
  • 嗨,我首先得到一个结果集,它返回一个属性名称(房屋名称),然后我想将属性名称传递给报告,然后我可以通过电子邮件向每个所有者发送报告在循环内。
  • 如果我通过表单手动操作(一个一个),参数没问题。
  • 您可以通过移动到第一条记录并在该字段中设置变量来测试结果集是否具有值。然后像处理表单一样将变量传递给代码。
  • site = [Forms]![frmRequestBookingsPaidOut]![sites].Value DoCmd.OpenReport "ReportBookingsForSites", acViewPreview 这是手动的,它工作正常。在循环中它不断弹出一个消息框,要求我手动传递参数

标签: ms-access vba


【解决方案1】:

您需要做的是循环查询并打开查询中每条记录的报告。比如:

Dim db as Database
Dim rec as Recordset
Dim PName as String

Set db = CurrentDB
Set rec = db.OpenRecordset ("Select * from YourQueryName")

Do While rec.EOF = False
  PName = rec("PropertyName")
  DoCmd.OpenReport "ReportBookingsForSites", acViewPreview, , , , PName
Loop

Set rec = Nothing
Set db = Nothing

您将 PName 放在 OpenReport 字符串中的原因是因为您传递了所谓的“OpenArgs”。这允许您打开报表并使用变量。

在报表的 OnLoad 事件中,输入如下内容:

Me.RecordSource = "Select * from Whatever where PropertyName = '" & Me.OpenArgs & "'"

应该可以的。

【讨论】:

    猜你喜欢
    • 2022-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    相关资源
    最近更新 更多