みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

AccessVBA Excelエクスポートについて

AccessVBA Excelエクスポートで質問です。(DoCmd.TransferSpreadsheet acExport)
既存Excelファイルに名前定義し、そこにVBAを用いてエクスポートをしたいのですが、
名前定義したところにエクスポートされません。

※PC環境:Win7 Access2007 Excel2007
※出力されるデータ行は、抽出する際の条件により変動あり

<Excel側で設定している名前定義>
名前:Data、範囲:ブック、参照範囲:データ!$B$5:$M$5

<Access VBAで書き込みしている内容>
DoCmd.TransferSpreadsheet acExport, 8, "テーブル名","ファイル名", False,"Data"

<Access側で実行し、実際にExcelにエクスポートされる1行目の位置>
名前定義したところからエクスポートされず、
名前定義をしているシート、列にはエクスポートされるのですが、データ1行目が名前定義していない箇所で、
シート名:データ B1:M1 が1行目にエクスポートされてしまいます。

今まで作っていたVBAでは、問題なくエクスポートできていたのですが、
現在作成しているものでは、なぜかできなくなってしまいました。

今までが運良く動いていただけでしょうか?→誤っている箇所を教えて下さい。
正しくVBAや名前定義ができているとして、このような現象を回避する術はありますでしょうか?

おわかりになる方、どうぞご教示いただけるようよろしくお願い致します。

投稿日時 - 2013-12-13 12:28:49

QNo.8384573

すぐに回答ほしいです

質問者が選んだベストアンサー

これ、以前から不思議に思っていました。
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

ではいかが?

投稿日時 - 2013-12-14 00:45:50

お礼

回答を入れていただいた上、回避についても具体的に丁寧に書いていただいて
どうもありがとうございます。
起点位置の指定をする事で無事にできました!


>>範囲を指定すると、エクスポートは失敗
>失敗の「意味」するところが良く分からないですが使うな・・ということでしょう。

すると、今動いているもの達は、運良く動いているだけなんですかね??
→ちょっと不安になってしまいます..
 とりいあえず上手く動いているので、動かなくなったら教えていただいたのに変更しようと思います。

どうもありがとうございました。

投稿日時 - 2013-12-14 10:34:07

このQ&Aは役に立ちましたか?

6人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問