Access VBA如何合并多表?100张同结构表合并为单查询需求
Access批量合并同结构表为单个查询的简便方法
由于你的所有表字段结构一致,完全可以通过VBA自动生成联合查询,无需逐个指定表名,步骤如下:
- 打开目标Access数据库,按下
Alt+F11打开VBA编辑器 - 在左侧导航栏右键点击数据库对象,选择插入 > 模块
- 将以下代码粘贴到模块窗口中,按
F5运行代码:
Sub MergeAllTables() Dim db As DAO.Database Dim tdf As DAO.TableDef Dim sqlStr As String Dim isFirstTable As Boolean Set db = CurrentDb() isFirstTable = True ' 遍历数据库中所有表,构建UNION ALL查询语句 For Each tdf In db.TableDefs ' 跳过系统表和临时表,可根据需求添加其他排除规则 If Left(tdf.Name, 4) <> "MSys" And Left(tdf.Name, 1) <> "~" Then If isFirstTable Then sqlStr = "SELECT * FROM [" & tdf.Name & "]" isFirstTable = False Else sqlStr = sqlStr & " UNION ALL SELECT * FROM [" & tdf.Name & "]" End If End If Next tdf ' 创建合并查询 If sqlStr <> "" Then ' 创建名为"合并所有表"的查询 db.CreateQueryDef("合并所有表", sqlStr) MsgBox "合并查询已创建完成,查询名为'合并所有表'", vbInformation Else MsgBox "未找到符合条件的可合并表", vbExclamation End If ' 释放对象 Set tdf = Nothing Set db = Nothing End Sub
注意事项
- 代码默认跳过系统表(以
MSys开头)和临时表(以~开头),如果有其他不需要合并的表,可在循环中添加额外判断(比如If tdf.Name <> "不需要的表名" Then) - 因为所有表结构一致,使用
SELECT *可以快速合并,若后续表结构可能变动,建议改为明确指定字段名(例如SELECT 字段1, 字段2, 字段3 FROM...) - 运行前建议备份数据库,避免意外情况
内容的提问来源于stack exchange,提问作者DATTA
相关产品推荐
相关产品推荐

