将 Access 表导出到 Excel,但每个名称都有不同的工作表
Posted
技术标签:
【中文标题】将 Access 表导出到 Excel,但每个名称都有不同的工作表【英文标题】:Export Access table to Excel, but have different sheets for each name 【发布时间】:2021-06-16 15:10:14 【问题描述】:我想将表格导出到 Excel,但每个名称都有单独的表格。
下面是我找到的代码,但有几个问题。
我想从表中拉取数据,代码设置为拉取查询(我想我可以将 qdef 更改为 TableDef)。 当我尝试编译它时,我收到一条 Invalid outside procedure 消息。Dim Db As DAO.Database, qdef AS DAO.QueryDef, rst As DAO.Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("SELECT DISTINCT [CustomerName] FROM [QueryName]")
Do While Not rst.EOF
Set qdef = db.QueryDefs("[MyTempQuery"])
qdef.SQL = "SELECT * FROM [QueryName] WHERE Customer = '" & rst!CustomerName & "'"
Set qdef = Nothing
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "MyTempQuery", _
"C:\Path\To\Excel\Files\" & rst!CustomerName & ".xlsx", True
rst.MoveNext
Loop
rst.Close
Set rst = Nothing: Set db = Nothing
以下是我所做的更改:
Dim db As DAO.Database, tdef As DAO.TableDef, rst As DAO.Recordset
Set db = CurrentDb
Set rst = db.OpenRecordset("SELECT DISTINCT [DM_NAME] FROM [RD Completed Report TBL]")
Do While Not rst.EOF
Set tdef = db.TableDefs("[My TempQuery]")
tdef.SQL = "SELECT * FROM [RD Completed Report TBL] WHERE DM = '" & rst!DM & "'"
Set qdef = Nothing
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "MyTempQuery", _
"C:\Path\To\Excel\Files\" & rst!DMS & ".xlsx", True
rst.MoveNext
Loop
rst.Close
Set rst = Nothing: Set db = Nothing
【问题讨论】:
TableDefs 没有 .SQL 属性。为什么需要将 QueryDef 替换为 TableDef?请解释第一段代码的问题。 嗨 Parfait,我遇到的第一个代码块的问题是编译错误:第一个 Set db 的外部过程无效 您在引用的查询名称之外有右括号。 是的,我解决了这个问题,但仍然收到相同的消息Set
呼叫不能在Sub
或Function
之外进行。事实上,不清楚您的代码是否封装在子例程或函数中。
【参考方案1】:
与 QueryDef 对象不同,TableDef 没有.SQL
属性。请参阅 MSDN 文档并比较 QueryDef 和 TableDef 的属性。在关系数据库中,table 是存储数据的物理实体,而 query(或 view)本质上是保存的 SQL 脚本(一个或更多语句)用于在稍后运行查询时检索数据。 MS Access 查询只能保存一条 SQL 语句,不存储任何数据。
鉴于两个代码块之间的 SQL 语句不同,您似乎认为 TableDefs
只能查询表,而 QueryDefs
只能查询查询。首先,TableDef
根本无法查询。其次,MS Access 中的QueryDef
可以查询表和/或查询。也就是说,任何SQL 语句都可以从any 表和any 数据库中保存的查询中获取,甚至可以将这两种类型的对象连接起来。下面的示例应该在QueryDef
中工作。因此,如果需要通过 SQL 过滤以将数据导出到 Excel 工作表,请继续使用QueryDefs
。
单表
SELECT ... FROM [myTable] WHERE ...
单一查询
SELECT ... FROM [mySavedQuery] WHERE ...
两张桌子
SELECT ...
FROM [myTable] t1
INNER JOIN [myTable] t2 ON t1.ID = t2.ID
WHERE ...
表和查询
SELECT ...
FROM [myTable] t
INNER JOIN [mySavedQuery] q ON t.ID = q.ID
WHERE ...
两个查询
SELECT ...
FROM [mySavedQuery] q1
INNER JOIN [mySavedQuery] q2 ON q1.ID = q2.ID
WHERE ...
【讨论】:
以上是关于将 Access 表导出到 Excel,但每个名称都有不同的工作表的主要内容,如果未能解决你的问题,请参考以下文章
从 MS Access 中将交叉表查询结果导出到 Excel
将 Excel 连接导出到 Access - .ODC 信息到 .ODBC