Необходимо создать запрос / представление, а затем указать 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
метод принимает строку, которая является «TableName» :
Строковое выражение, которое является именем таблицы Microsoft Access, в которую вы хотите импортировать текстовые данные, экспортировать текстданные или ссылки на текстовые данные или запрос Microsoft Access, результаты которого вы хотите экспортировать в текстовый файл.
Если вы не создадите запрос, все, что у вас есть, - это SQL впеременная, которая является строкой (не имя таблицы).Таким образом, мы создаем querydef и затем передаем имя этого querydef в метод TransferSpreadsheet
, затем сдуваем querydef, так как нам не нужно, чтобы этот объект зависал в базе данных.
Было бы хорошо, есливместо этого этот метод принял строку sql ...