如何将2个查询导出到Excel中的单个工作表中

我正在使用TransferSpreadsheet将访问的查询导出到Excel,它工作正常。

DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "qryName", "test1.xls", True 

现在我有另一个查询,我想要从这个查询中的数据添加到同一个工作表。 我怎样才能做到这一点?

为我的第一个查询我使用

 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qryNameFirst", "test1.xlsx", True, "MyWorksheetName" 

对于第二个查询,我把它放在一个logging集

 Dim rstName As Recordset Set rstName = CurrentDb.OpenRecordset("qryNameSecond") 

然后我用CopyFromRecordset将这个logging集复制到工作表中。

 Dim objApp As Object, objMyWorkbook As Object, objMySheet As Object, objMyRange As Object Set objApp = CreateObject("Excel.Application") Set objMyWorkbook = objApp.Workbooks.Open("test1.xlsx") Set objMySheet = objMyWorkbook.Worksheets("MyWorksheetName") Set objMyRange = objMySheet.Cells(objApp.ActiveSheet.UsedRange.Rows.Count + 2, 1) With objMyRange rstName.MoveFirst 'Rewind to the first record .Clear .CopyFromRecordset rstName End With 

objApp.ActiveSheet.UsedRange.Rows.Count将返回最后使用的行号。 我加了+2,因为我想在两个查询之间有一个空行。

要添加我做了一个性能testing。 我用500.000条loggingtesting了这个方法。 该表包含500k行,第一个查询包含250k行,第二个查询(包含OpenRecordSet)包含250k行。 生成Excel文件表大约需要10秒钟,并将数据显示在E6600(2,40 Ghz),带有access / excel 2010的4GB ram机器上。

编辑:

另一种方法是使用TransferSpreadsheet 2次。

 DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qryNameFirst", "test1.xlsx", True, "MyWorksheetName" DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qryNameSecond", "test1.xlsx", True, "MyWorksheetName2" 

这将在工作簿中创build2个工作表,然后将一个工作表的数据复制到另一个工作表中。 我认为性能将是相同的,但不确定,我会坚持使用OpenRecordSet。