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

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

解決済みの質問

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

投稿日時 - 2008-07-16 22:13:40

QNo.4182030

困ってます

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

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

投稿日時 - 2008-07-17 11:17:00

お礼

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

投稿日時 - 2008-07-18 09:50:59

ANo.2

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

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

回答(2)

ANo.1

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

投稿日時 - 2008-07-17 07:09:26

補足

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

投稿日時 - 2008-07-17 10:54:32

お礼

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

投稿日時 - 2008-07-18 09:49:24

あなたにオススメの質問