我想通过VBA从访问执行预定义查询并将其打印到调试输出。查询设计的名称位于名为report的变量中。
我当时希望它适用于:
debug.print db.Execute report
但每次vba自动更正为:
debug.print db.Execute; report
如果我理解正确的话,;
代表一条新线,因此在我的情况下毫无意义。但在这两种情况下,无论有没有新线路,我都会收到错误。我认为简单的问题是,这不是正确的语法。
我可以找到很多关于如何调试打印在VBA中创建为字符串的查询的信息,但是我找不到任何提示如何通过查询设计输出在Access中预定义的查询。 / p>
答案 0 :(得分:3)
尝试:
'// You need the parentheses because the result has to be evaluated before it can be passed to the .Print() method
Debug.Print db.Execute(result)
或
Dim myResult As String
myResult = db.Execute(result)
Debug.Print myResult
在VBA中,只要不将结果分配给任何内容,就可以在不使用括号的情况下将参数传递给过程/方法。
'// Not assigning anything
MyExampleFunction arg1, arg2, arg3
'// assigning the result, which needs to be evaluated before it can be passed to a variable.
MyResult = MyExampleFunction(arg1, arg2, arg3)
以同样的方式,当您致电Debug.Print
时,它会假定db.Execute
和result
实际上是单独的参数(它无法知道您希望result
首先传递给db.Execute
,因为你的语法中没有任何内容表明这一点。所以你必须使用括号让它知道。
答案 1 :(得分:0)
似乎问题在于,只能使用db.Execute
而不是查询来调用更新。
没有很好的解决方案可以使用debug.print
从查询中打印整个表格,但使用RecordSet
,如下面的代码所示,这是一种可行的方法。
Dim rs As DAO.RecordSet
Set rs = db.OpenRecordset(Bericht)
Do Until rs.EOF = True
Debug.Print rs("Matrikelnummer"), rs("Bewertung"), rs("Termin (Datum)"), rs("Maximale Bewertung"), rs("Bestehensgrenze"), rs("Versuch"), rs("Äquivalenzleistung")
rs.MoveNext
Loop
rs.Close
Set rs = Nothing