0

TransferSpreadsheetを使用して、アクセスからExcelにクエリをエクスポートしていますが、正常に機能します。

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

別のクエリがあり、このクエリのデータを同じワークシートに追加したいと思います。これどうやってするの?

4

1 に答える 1

4

最初のクエリでは、

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

2番目のクエリでは、レコードセットに入れました

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つのクエリの間に空の行が必要なため、+2を追加しました。

追加するために、私はパフォーマンステストを行いました。このメソッドを500.000レコードでテストしました。500k行を含むテーブル、25万行を含む最初のクエリ、25万行を含む2番目のクエリ(OpenRecordSetを使用)。Excelファイルシートを生成し、Access / Excel 2010を備えたE6600(2,40 Ghz)、4GBRAMマシンでデータを表示するのに約10秒かかりました。

編集:

同じことを達成する別の方法は、TransferSpreadsheetを2回使用することです。

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

これにより、ワークブックに2つのシートが作成され、一方のワークシートのデータがもう一方のワークシートにコピーされます。パフォーマンスは同じだと思いますが、確かではありません。OpenRecordSetを使い続けます。

于 2012-08-11T10:26:17.850 に答える