DOCmd找不到包含SQL的字符串

时间:2018-05-21 18:16:07

标签: sql ms-access access-vba

拥有以下代码:

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'。

1 个答案:

答案 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字符串...

,那将是很好的