我试图通过使用 DoCmd.OpenReport 将变量从记录集传递到报表来获取在 VBA 中运行的 Access 报表,但无法使其工作。有人可以让我知道我做错了什么吗?
使用基础报告中名为“Code”的特定分配变量 具有特定文本的作品:“[Code]=""LXFT48"""
但是当我尝试传递相应的记录集变量“FactCode”时 报告中不显示任何内容:“[Code]=”&“[FactCode]”
相反,我被要求提供参数的值,因此显然它无法识别该字段。
我尝试了 [FactCode] 的替换,例如 [Model] 和 rst![Model],但没有任何效果。
这只是报价正确的问题吗?
我可以通过 msgbox 获取要显示的每条记录的记录集数据。
Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim tdf As DAO.TableDef
Dim strSQL As String
Dim FactCode As String
Set db = CurrentDb
Set tdf = db.TableDefs("tbl TRAAFES-1")
Set fso = CreateObject("Scripting.FileSystemObject")
strSQL = "SELECT * FROM [tbl TRAAFES-1]"
Set rst = tdf.OpenRecordset()
With rst
rst.MoveFirst
Do Until .EOF
FactCode = rst![Model]
DoCmd.OpenReport "rpt Pricing Rules- AAFES Format - FULL REPORT", acViewPreview, "", "Code = ""LXFT48””", acNormal ‘ *** THIS WORKS ***
DoCmd.OpenReport "rpt Pricing Rules- AAFES Format - FULL REPORT", acViewPreview, "", "[Code]=" & "[FactCode]", acNormal ‘ *** DOESN’T WORK***
要修复代码,请使用
"[Code]=" & rst![FactMode]
而不是 "[Code]=[FactMode]"
总而言之,您正在使用串联构建所需的字符串。
这与这两种说法的区别本质上是一样的:
Dim name as String
Dim greeting as String
name = "David"
greeting = "Hello, name!" '// Hello, name! <-- incorrect
greeting = "Hello, " & name & "!" '// Hello, David!
您的代码稍微复杂一些,因为您正在构建一个需要由 Access 作为过滤条件进行评估的字符串。您有一个变量
FactCode
,其值例如 LXFT48
并且您想要构建一个字符串 [Code] = LXFt48
..但这是错误的!您需要构建一个字符串[Code] = 'LXFT48'
!
因此,在这种情况下,还要在字符串周围添加引号。 示例:
Dim myStr as String
dim FactCode as String
FactCode = "LXFT48"
myStr = "[Code] = " & "'" & FactCode & "'"
'// Or if you prefer a few less characters to type
myStr = "[Code] = '" & FactCode & "'"