使用 VBA 获取报表中特定控件的值?
Posted
技术标签:
【中文标题】使用 VBA 获取报表中特定控件的值?【英文标题】:Use VBA to get value of specific control in report? 【发布时间】:2013-10-27 19:46:59 【问题描述】:我这辈子都不记得如何使用 Access VBA 来获取报表中特定控件的值了。
我的报告有多行(它包含一个带有查询结果的表格)。我希望能够双击一行中的一个字段并打开一个包含第二个查询结果的单独表单。这些结果应基于包含最初双击的字段文本的 WHERE 子句。
如果我使用 Me.ControlName.Value,我的第二个报告将使用第一个报告中的每条记录。如何告诉它只使用被双击的记录?
【问题讨论】:
【参考方案1】:使用DoCmd.OpenReport
的WhereCondition 选项根据第一个报告中的双击字段过滤第二个报告的记录集。
以下示例在 Access 2007 中使用您的示例 db 文件进行了测试。报告文本框 Fruit 有一个双击事件过程,该过程基于以下条件创建 WhereCondition 字符串文本框的值,然后使用该字符串调用OpenReport
...
Private Sub Fruit_DblClick(Cancel As Integer)
Dim strWhere As String
strWhere = "[Fruit]='" & Me.Fruit.Value & "'"
Debug.Print strWhere
DoCmd.OpenReport ReportName:="rptLabel", _
View:=acViewPreview, WhereCondition:=strWhere
End Sub
【讨论】:
报告中的每条记录仍在循环,而不仅仅是被点击的记录。只有单击的记录会显示在调试消息中,但它会尝试为每条记录输出第二个报告,而不仅仅是单击的记录。 好像根本没有包含 WHERE 子句。我已经验证它是正确的(如果我在查询中手动使用它,WHERE 子句可以正常工作)。 我不知道它为什么会失败。我在 Access 2007 中使用表单测试了该代码。将Option Explicit
添加到表单模块的声明部分,然后从 VB 编辑器的主菜单运行调试->编译。你得到一个编译错误?
无编译错误。我正在使用报告而不是表格。我应该尝试使用表格吗?这个小项目的目的是获取打开的服务记录列表,并提供双击记录并打开第二个报告(或表单)的能力,该报告会从服务记录的数据中自动生成可打印的标签。跨度>
我不相信表单与报告会有所不同,因为 OpenForm
和 OpenReport
都包含 WhereCondition 选项。你的尝试和我的尝试之间肯定有另一个不同的实现细节,但我不能告诉你在哪里看。如果您将数据库的副本上传到文件共享站点并提供链接,我会尝试找出问题。以上是关于使用 VBA 获取报表中特定控件的值?的主要内容,如果未能解决你的问题,请参考以下文章
UniGui中使用Grid++Report报表控件子报表获取数据的方法