我有一个访问数据库,它从异常表中提取卷 . 每个卷都有一个ID . 我已创建查询以提取所有可能卷的详细信息,并使用与每个卷ID相同的名称保存每个查询 . 每次将卷异常拉入此数据库时,卷ID都可以更改 . 因此,有一个运行的查询使用新ID更新卷表 .
除非您知道使用查询执行此操作的方法,否则我需要编写将循环访问卷表的Access VBA代码,标识每个查询的名称,然后运行这些查询,直到它到达表的末尾 . 例如,代码需要查看卷表中的第一条记录,比如它是1040.这是需要运行的查询的名称 . 然后代码需要找到名为1040的查询并运行它 . 这是一个make table查询 .
表名是FacilityVolume,它有一个名为Volume的字段 . 字段中的值是短文格式,即使它是数字 .
我尝试了几种不同的东西 . 这是我最近的尝试 .
Dim db as Database
Dim vol as Recordset
Dim code as QueryDef
Set db = CurrentDb()
Set vol = db.OpenRecordset("FacilityVolume")
Set Volume = vol.Fields("Volume")
Vol.MoveFirst
Do Until vol.EOF = True
If QueryDef.Name = Volume Then
DoCmd.OpenQuery
Else MsgBox("The query does not exist")
vol.MoveNext
Loop
End Sub
我在互联网上搜索了几天,找不到任何对这个特定代码的引用 . 我相信其他用户想知道如何做到这一点 . 我是一个新手,仍在学习VBA,所以你能提供的任何帮助都非常感谢 .
3 回答
您的代码将循环,即使您找到了您的查询并且您没有将Query-Name传递给OpenQuery命令...这将无效...
集合
CurrentDb.QueryDefs
知道所有现有查询,但没有"Exists"或"Contains"方法 .所以:方法是循环(当你尝试它)或错误处理 .
我已经很久以前用VBA编码了,但我想你可以试试:
我建议在VBA中使用完整的DAO来实现您的目标 .
DoCmd.OpenQuery
实际上是一个模仿宏RunQuery
动作的VBA函数 . 您没有太多控制或真正的错误处理能力 .这是一个完整的代码函数
给您一个如何从表中选择列出查询的全部或部分记录的示例,包括仅选择"Active"记录的能力,甚至可以按特定的执行顺序对它们进行排序
处理表中查询名称不存在的实例
允许您显示有关发生的任何错误的消息
允许您将退出代码返回给调用过程,以便您可以根据运行这些查询的结果执行操作(例如,如果此函数遇到任何类型的错误,则选择不执行代码中的下一步(返回非零值)
这是代码 . 您将需要修改SQL语句以获取正确的表名和字段名,但这应该是一个很好的示例,可以帮助您顺利完成 .
@Shnugo的答案已经很好了 . 只是为了给你一个完整的VBA功能,这应该适合你 .