- 締切済み
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)に更新しようと考えています。 この考え方で問題ないのでしょうか!? もっと簡単な方法があるという方や、何か良い方法をお持ちの方 いらっしゃいましたら、よろしくお願いいたします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- redfox63
- ベストアンサー率71% (1325/1856)
変更が必要なレコードセット(mdbRes)に対してLockが adLockReadonlyってのは無いでしょう adLockOptimisticとかadLockPessimisticを使用する必要があると思いますよ
- redfox63
- ベストアンサー率71% (1325/1856)
レコードセットとフィールドをそれぞれループすれば良いように思います 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ループの内部で除外する処理が必要です
お礼
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