- ベストアンサー
AccessVBA Excelエクスポートについて
- AccessVBA Excelエクスポートで質問です。(DoCmd.TransferSpreadsheet acExport)既存Excelファイルに名前定義し、そこにVBAを用いてエクスポートをしたいのですが、名前定義したところにエクスポートされません。
- Excel側で設定している名前定義はDataとしており、範囲はデータ!$B$5:$M$5です。Access VBAで書き込んでいる内容はDoCmd.TransferSpreadsheet acExport, 8, "テーブル名","ファイル名", False,"Data"です。
- Access側で実行し、実際にExcelにエクスポートされる1行目の位置は名前定義したところからではなく、シート名:データ B1:M1にエクスポートされてしまいます。現在作成しているVBAではエクスポートできなくなってしまったため、正しいVBAや名前定義の設定がある場合でもこの現象を回避する方法を教えていただきたいです。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
これ、以前から不思議に思っていました。 http://office.microsoft.com/ja-jp/access-help/HA001226308.aspx には 『Range/範囲 インポートまたはリンクするセル範囲を指定します。 ワークシート全体をインポートまたはリンクする場合は、 この引数を指定する必要はありません。 インポートまたはリンクするワークシートの範囲名を入力するか、 A1:E25 などのセル範囲を指定します。 Access 97 以降のバージョンでは、 A1..E25 の構文は使うことができないことに注意してください。 Excel 5.0 以降のバージョン形式のワークシートからインポートまたはリンクする場合は、 セル範囲の前にワークシート名と感嘆符を付けてワークシートを指定することができます (ワークシート名!A1:C7 など)。 メモ ワークシートにエクスポートする場合は、この引数は指定しません。 範囲を指定すると、エクスポートは失敗します。』 と載っています。 >範囲を指定すると、エクスポートは失敗 失敗の「意味」するところが良く分からないですが使うな・・ということでしょう。 前置きはこれ位にして、オートメーションでExcelを開いて Sub xlOutPut() 'Microsoft Office xx.xx Access database engine Object Library 'または、Microsoft DAO 3.6 Object Library に参照設定が必要です Dim daoDB As Database Dim daoRS As DAO.Recordset Dim objXl As Object Dim objBk As Object Set daoDB = CurrentDb Set daoRS = CurrentDb.OpenRecordset("テーブル名") Set objXl = CreateObject("excel.application") Set objBk = objXl.Workbooks.Open("エクセルファイルのフルパス") objXl.DisplayAlerts = False objBk.sheets("sheet1").cells(3, 3).copyfromrecordset daoRS 'cells(3, 3) を起点として書き出し objXl.DisplayAlerts = True objBk.Save objXl.Quit Set objBk = Nothing: Set objXl = Nothing daoRS.Close: Set daoRS = Nothing Set daoDB = Nothing End Sub ではいかが?
お礼
回答を入れていただいた上、回避についても具体的に丁寧に書いていただいて どうもありがとうございます。 起点位置の指定をする事で無事にできました! >>範囲を指定すると、エクスポートは失敗 >失敗の「意味」するところが良く分からないですが使うな・・ということでしょう。 すると、今動いているもの達は、運良く動いているだけなんですかね?? →ちょっと不安になってしまいます.. とりいあえず上手く動いているので、動かなくなったら教えていただいたのに変更しようと思います。 どうもありがとうございました。