如何将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。