如何查询2,从访问导出到一个工作表在Excel中(How do I export 2 queries

2019-09-21 02:29发布

我使用TransferSpreadsheet的输出从访问查询到Excel,它工作正常。

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

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

Answer 1:

对于我的第一个查询我使用

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坚持。



文章来源: How do I export 2 queries to a single worksheet in excel from access