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"
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を使い続けます。