「みんな教えて! 選手権!!」開催のお知らせ

ACCESSのVBAを使ってテーブルのデータを
既存ブックに出力し、別名で保存をしたいのですが、
どうも、処理が遅くて困っています。
改善点がありましたら教えてくださいお願いいたします。

Dim objExcel As Excel.Application
Dim xlWrkbk As Excel.Workbook
Dim xlWrksh As Excel.Worksheet
Dim rs As DAO.Recordset
Dim strFilename As String

strFilename = CurrentProject.Path & "既存ブック名.XLS"

Set objExcel = New Excel.Application
Set xlWrkbk = objExcel.Workbooks.Open(Filename:=strFilename, ReadOnly:=True)
Set xlWrksh = xlWrkbk.Worksheets("シート名")

Set rs = CurrentDb.OpenRecordset("テーブル名", dbOpenSnapshot)

With objExcel
xlWrksh.Range("A:N").Clear
xlWrksh.Range("A2").CopyFromRecordset rs
xlWrkbk.SaveAs Filename:=CurrentProject.Path & "新しいブック名.xls"
xlWrkbk.Close
.Quit
rs.Close
End With

Set rs = Nothing
Set objExcel = Nothing
Set xlWrkbk = Nothing
Set xlWrksh = Nothing

A 回答 (1件)

内容吟味しないで申し訳ないですけど、既成のマクロでスプレッドシートにエクスポートするマクロが


あるので、それをつかったらどうでしょうか。
多分、レコードを1つづつ呼び出して書き込むよりかは早いかと。

ヘルプを見たところVBAでは、
docmd.TransferSpreadsheet(TransferType, SpreadsheetType, TableName, FileName, HasFieldNames, Range, UseOA)
を使うようです。
使い方の詳細は、ヘルプから参照して速さを比較してください。

この回答への補足

TransferSpreadsheet だと、
確かに指定シートに出力はできますが別名保存はできませんよね?
Excelの元データに出力して別名保存したいのですが・・・。

一応上記のコードだと、理想通りの処理が行われているのですが、
CopyFromRecordset の部分でかなり処理に時間がかかっています。

スプレッドシートというのは始めて聞きました、
ちょっと調べてみます
ありがとうございます。

補足日時:2012/10/24 15:38
    • good
    • 1
この回答へのお礼

すみません、上記コードのセル消去部分とTransferSpreadsheetを
組み合わせて、かなり時間短縮することができました!

ありがとうございます!

お礼日時:2012/10/24 16:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


おすすめ情報

このQ&Aを見た人がよく見るQ&A