• 締切済み

Excel → Access データをインポート

OS WinXP Pro SP2 Office 2000 SP3 はじめまして。 マクロ(Excel VBA)を記述しているExcelファイル(Xls_Macro.xls)とインポート用データのExcelファイル(Xls_Data.xls)は別々のファイルになっていて、マクロを実行するとExcelファイルとインポート用データのExcelファイルのデータをAccessファイル(Access.mdb)にインポートする仕組みを開発しています。 インポート用データのExcelファイル(Xls_Data.xls)をADOで接続しレコードセットでデータを取得し、Accessファイル(Access.mdb)もADOで接続しレコードセットの「.AddNew」でAccessファイル(Access.mdb)に更新しようと考えています。 この考え方で問題ないのでしょうか!? もっと簡単な方法があるという方や、何か良い方法をお持ちの方 いらっしゃいましたら、よろしくお願いいたします。

みんなの回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.2

変更が必要なレコードセット(mdbRes)に対してLockが adLockReadonlyってのは無いでしょう adLockOptimisticとかadLockPessimisticを使用する必要があると思いますよ

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

レコードセットとフィールドをそれぞれループすれば良いように思います rsSrc, rsDestが ExcelとAccessの各レコードセットを表すとすると 基本的には rsSrc.MoveFirst rsDest.MoveFirst do while Not rsSrc.EOF   rsDest.AddNew   for n=0 to rsSrc.Fileds.count -1     rsDest(n).Value = rsSrc(n).Value   next   rsDest.Update   rsSrc.MoveNext loop といった具合でしょう オートナンバータイプのフィールドなどがあるなら データの転記を行っているForループの内部で除外する処理が必要です

nobi_kun
質問者

お礼

redfox63 様 早速の回答ありがとうございます。 やはり、レコードセットとフィールドをそれぞれループする方法でやってみようと思います。 上記ロジックより実行した場合に、実行時エラー:3251 「<--実行時エラー 3251: アプリケーション定義またはオブジェクト定義のエラーです。」が発生してしまいます。 なぜなのでしょうか!? mdbRes.の後に選択候補としてAddNewはありました。 以下ロジック 'Excel用レコードセット Set dbRes = New ADODB.Recordset dbRes.CursorLocation = adUseClient dbRes.Open strSQL, cnn, adOpenForwardOnly, dLockReadOnly 'Access MDB用レコードセット Set mdbRes = New ADODB.Recordset mdbRes.Open tablename, cnn_Mdb, adOpenForwardOnly,adLockReadOnly dbRes.MoveFirst mdbRes.MoveFirst Do While Not dbRes.EOF mdbRes.AddNew '<--実行時エラー 3251: アプリケーション定義またはオブジェクト定義のエラーです。 For n = 0 To dbRes.Fields.Count - 1 mdbRes(n).Value = dbRes(n).Value Next mdbRes.Update dbRes.MoveNext Loop

関連するQ&A