我使用TransferSpreadsheet的输出从访问查询到Excel,它工作正常。
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "qryName", "test1.xls", True
现在我有另一个查询,我想从这个查询的数据添加到同一工作表。 我怎样才能做到这一点?
我使用TransferSpreadsheet的输出从访问查询到Excel,它工作正常。
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, "qryName", "test1.xls", True
现在我有另一个查询,我想从这个查询的数据添加到同一工作表。 我怎样才能做到这一点?
对于我的第一个查询我使用
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qryNameFirst", "test1.xlsx", True, "MyWorksheetName"
对于第二个查询我把它放在一个记录
Dim rstName As Recordset
Set rstName = CurrentDb.OpenRecordset("qryNameSecond")
然后,我只是这个记录复制到与CopyFromRecordset工作表。
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,因为我想在这两个查询之间的空行。
要添加我做了performancetest。 我有500.000记录测试这种方法。 含有50万行,25万个的含行,所述第二查询(具有OpenRecordSet)含有250K行所述第一查询表。 用了约10秒,以产生excel文件片材并在E6600(2,40千兆赫),4GB RAM机存取显示数据/ Excel 2010中。
编辑:
来完成相同的另一种方法是使用TransferSpreadsheet的2倍。
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qryNameFirst", "test1.xlsx", True, "MyWorksheetName"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "qryNameSecond", "test1.xlsx", True, "MyWorksheetName2"
这将在工作簿创建2个表,然后只是一个工作表中的数据复制到其他。 我认为性能是一样的,但不能肯定,我将与OpenRecordSet坚持。