拥有以下代码:
Dim SKbyYrByMo As String
SKbyYrByMo = "TRANSFORM Sum([1ACTMasterQuery].Extension) AS SumOfExtension" & _
" SELECT [1ACTMasterQuery].Year, [1ACTMasterQuery].Sku, Sum([1ACTMasterQuery].Extension) AS [Total Of Extension]" & _
" FROM 1ACTMasterQuery" & _
" GROUP BY [1ACTMasterQuery].Year, [1ACTMasterQuery].Sku" & _
" PIVOT [1ACTMasterQuery].MonthNo"
DoCmd.TransferSpreadsheet _
acExport, _
acSpreadsheetTypeExcel12Xml, _
"SKbyYrByMo", _
"C:\Users\John\Desktop\RSExcel.xlsx", _
True
如果我在ACCESS查询列表中将查询名称更改为1,则可以正常工作。 但是当我使用SKbyYrByMo时,我收到了消息
'Microsoft数据库引擎找不到对象'SKbyYrByMo'。
答案 0 :(得分:1)
您必须创建一个查询/视图,然后将DoCmd.TransferSpreadsheet
指向新创建的对象作为"表"参数:
SKbyYrByMo = "TRANSFORM Sum([1ACTMasterQuery].Extension) AS SumOfExtension" & _
" SELECT [1ACTMasterQuery].Year, [1ACTMasterQuery].Sku, Sum([1ACTMasterQuery].Extension) AS [Total Of Extension]" & _
" FROM 1ACTMasterQuery" & _
" GROUP BY [1ACTMasterQuery].Year, [1ACTMasterQuery].Sku" & _
" PIVOT [1ACTMasterQuery].MonthNo"
'Create the view/query
CurrentDB.CreateQueryDef "SKbyYrByMo", SKbyYrByMo
'Now you can reference that:
DoCmd.TransferSpreadsheet _
acExport, _
acSpreadsheetTypeExcel12Xml, _
"SKbyYrByMo", _
"C:\Users\John\Desktop\RSExcel.xlsx", _
True
'And Delete the query:
CurrentDb.QueryDefs.Delete "SKbyYrByMo"
原因是TransferSpreadsheet
方法takes a string that is a "TableName"中的第三个参数:
一个字符串表达式,它是您的Microsoft Access表的名称 想要导入文本数据,从中导出文本数据或链接文本数据 到,或要导出其结果的Microsoft Access查询 一个文本文件。
如果您不创建查询,那么您所拥有的只是一个字符串变量中的SQL(不是表名)。因此,我们创建querydef,然后将该querydef的名称传递给TransferSpreadsheet
方法,然后吹掉querydef,因为我们并不真的需要在数据库中挂出该对象。
相反,如果该方法采用sql字符串...
,那将是很好的