• ベストアンサー

ACCESS VBAからDAOを使ってのExcelファイル読み込みについて

以前もお世話になりました。またよろしくお願いできますでしょうか。(OS: XP , Access 2003) 今回はACCESS VBA からDAOを使ってのExcelファイルの読み込みを試みています。 最初はTransferSpreadsheetを使ってうまく行っている様に見えたのですが、Quit及びSet XLApp=Nothingをちゃんとしていても、タスクマネージャーを開けると裏でEXCELが走っている状態でした。 他サイトで同じ現象の解決でAddNewが提案されており、そのサイトの例と他のDAOを使っている例を自分用にアレンジしてみました。 (他サイトのURL張っていいのかわからないので外しておきます) エラー1)Import元のファイルを開けていないと"External table is not in the expected format" でOpenDatabaseの行で止まります。これは仕様でしょうか?わざわざ Excel.Applicationなどで開けないと行けないということですか? エラー2)"Run-time error 1004. Method 'Range' of object '_Global' failed"。ファイルを開けて実行した場合Rangeの所で止まります。Public subにしたりしましたが関係なかったようです。 申し訳ありませんが、アドバイスお願い致します。 ------- Sub loadToDB() Dim rs, rs2 As DAO.Recordset Dim db As DAO.Database Dim SheetName As String Set db = OpenDatabase("U:\projects\ABC\TestFile.xls", False, False, "Excel 8.0;")   ’ファイルを開けていないとまずここで SheetName = db.TableDefs(0).Name Set rs = db.OpenRecordset(SheetName) Set rs2 = CurrentDb.OpenRecordset("TableA") Do Until rs.EOF rs2.AddNew rs!F1 = Range("A1").Value   ’ファイル開けているとここで駄目です rs!F2 = Range("B1").Value rs!F3 = Range("C1").Value rs!F4 = Range("D1").Value rs2.Update rs.MoveNext Loop rs.Close Set rs = Nothing db.Close Set db = Nothing rs2.Close Set rs2 = Nothing End Sub

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

  • ベストアンサー
  • nda23
  • ベストアンサー率54% (777/1415)
回答No.2

DAOでExcelを扱う方法と、OLEでExcelを扱う方法がゴチャゴチャです。 DAOの場合、更新不可能かも知れません。また、Range("A1")のような 書き方はありません。 OLEで操作した方が、何かと応用範囲が広いので便利かと思います。 Dim Apl 'Excelアプリケーション Dim Wkb 'ワークブック Dim Wks 'ワークシート Set Apl = CreateObject("Excel.Application") Set Wkb = Apl.Workbooks.Open("C:\~.xls") Set Wks = Wkb.Worksheets(1) Wks.Range("A1").Value = "~" == 略 == Wkb.Save Wkb.Close Apl.Quit Set Apl = Nothing

LELELEo
質問者

お礼

色々なサイトを見ていたのでやっぱりゴチャゴチャになってましたか;; ご指摘有難うございます。 なんとかテーブルにデータを入れる事ができました。 お返事有難うございました。

その他の回答 (1)

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

http://www.accessclub.jp/search5/namazu.cgi?query=Excel Accessは殆ど使った事ないのですが、上記サイトでヒント等は ありませんでしょうか?

LELELEo
質問者

お礼

テストの結果ADOで進めて見ることにしました。 とりあえずテーブルにデータを入れる事ができました。 お返事有難うございました。

LELELEo
質問者

補足

さっそくのお返事有難うございます。 Accessクラブや、他のサイトからもヒントを探してしるのですが 私の理解が弱いのか解決につながる情報が見つからない状態です。 調査の結果、DAOは古いとの事なのでADOを使うという選択肢も考えており、現在はそれをテスト中です。

関連するQ&A

専門家に質問してみよう