• ベストアンサー

ExcelVBAでテーブルの更新

ExcelVBAなんですが、 A.CSVをテーブルBの項目と上から順番に照らし合わせ、内容が違う場合にA.CSVの内容でテーブルBの項目を更新するというものを作りたいと思っています。 DB接続し、if文で同じ内容かどうかを分ける事はできたのですが、その後がどうしてもわかりません>< 色々なサイトを見ていると、Rs.Editというものが使われているのですが、何故か使えないのです。 メソッドまたはデータメンバが見つかりませんというエラーが出ます。 これは何が原因なのでしょうか??

  • kamay
  • お礼率73% (361/491)

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

  • ベストアンサー
回答No.1

はじめまして。 Rsというオブジェクトを事前に定義していますか? Set Rs=XXXXX・・・ という文がないと、エラーが出ます。 コードを見てみないとなんとも言えませんが、おそらくオブジェクト未定義によるエラーだと思います。

kamay
質問者

お礼

ありがとうございます! 開き方の問題みたいでした><

関連するQ&A

  • ExcelVBAからAccess更新のSQL

    お世話になります。 ExcelVBAからAccessDBを更新するソースを書いています。 外部データMDBを取得するマクロを記録し、SQL文をUPDATEに変更しているのですが、更新されません。 a = "UPDATE `C:\Documents and Settings\User\デスクトップ\sample`.住所テーブル 住所テーブル" & Chr(13) & "" & Chr(10) & "SET 住所テーブル.氏名 = 'b'" .CommandText = Array(a) このaをAccessのクエリで実行すると更新されますが、Excelからだと更新できません。 Commitしてないからでしょうか? ヘルプで検索してもCommittransメソッドと検索されるのですが、右側に内容が表示されません・・・。 ご存知の方、ご教授願います。 情報が足らないなどもお願いします。

  • accessでレコード更新直後の反映について

    アクセスのレコードの更新直後、他PCから該当レコードを読むと更新が反映されていません。回避方法をお教え下さい。 尚、アクセスの初心者です。 ”データ.mdb”をServerへ置き、複数のPCの”プログラム.mdb”から”データ.mdb”のテーブルをリンクし使用する予定です。 しかし、PC-Aの”プログラム.mdb”でテーブルを更新した直後PC-Bの”プログラム.mdb”からテーブルを読み込むと更新が反映されていません。 しかし、更新後 約2秒以上経過した後に読み込むと更新が反映されています。 試行錯誤しましたが改善しません。 以下に環境を示します。 Access2003で”データ.mdb”と”プログラム.mdb”を作成しAccess2010とAccess2003で使用 T_確認テーブルに”Yes/No型”で”アクセス中フラグ”を設定 ServerとPC-AとPC-BはLANで接続 <プログラム内容の抜粋> Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("T_確認テーブル", dbOpenDynaset, dbDenyRead) rs.MoveFirst If rs!アクセス中フラグ = True Then ' → または”if rs!アクセス中フラグ Then”でも同じ MsgBox "既に他者が使用", vbExclamation, "入力依頼" else rs.movefirst rs.edit   rs!アクセス中フラグ=True ' フラグをセット rs.update End If db.Close Set db = Nothing

  • ACCESSでテーブルを更新する時で

    テーブル(1)のある項目で、テーブル(2)のある項目を更新したいのですが・・    項目 → No ・・・ 更新a 更新b テーブル(1)  001     100 200 テーブル(2)  001      50  50          ↓          ↓ 【更新後】 001 100 200 どの様にすればできますか教えて下さいませんか。 《クエリーの更新を使えばできそうなんですが、実際にどうすれば良いのかよく解りません》       

  • テーブルの作り方で困っています

    Oracle10gを使っています。 項目の順番がバラバラなcsvのデータを並べ換えてテーブルに登録したいのですが、 項目数はcsvによって違っていて、テーブルに登録する項目の数もcsvによって変わります。 例) AAA.csvの場合 元々は1,2,3,4,5,6の順番で項目が並んでいるが、登録する項目と順番は→3,1,2,4,5 BBB.csvの場合 元々は1,2,3,4,5,6の順番で項目が並んでいるが、登録すると項目と順番は→2,3,1,5,4,6 (AAA.csvとは違って、6番目の項目もテーブルに登録したい) といった感じです。 登録するテーブルはデータをプールする場所で、本登録するテーブルにこのテーブルのデータを移したら移し元のデータを消そうと思っています。 登録する側のテーブルの項目数がはっきりと決められないので、毎回テーブルをドロップ→違う項目数で再作成しようかとも思ったのですが、複数の人がこの処理を行いたい場合はやっぱりやめておいたほうがいいですよね? 分かり難い質問で申し訳ありません…。 何か良い知恵がありましたら、ご教授願います。 よろしくお願いします。

  • テーブル間の更新クエリにおいて

    Access2010で入力フォームを作成しています。 一時データとしてテーブルAを連結サブフォームとして編集します。保存ボタンをクリックするとメインのテーブルB(Aとフィールド構成は同じ)へA、Bのフィールド間で値が異なる場合、上書き保存をするという更新クエリを用意しています。 質問はテーブルAでフォーム上、オプショングループのラジオボタン(項目はテキスト型 値リストは0と1)に設定した項目が初期値のnullから入力したデータがメインのテーブルBに更新できないので困ってます。 連結フォームなので、テーブルAに値が入っており且つBと値が異なるのはデータビューで確認しています。ただ更新クエリでの選択(データビュー)に載ってこない。 この項目がテーブルBに反映されるのは予めインポートで0もしくは1が入力されていた状態から変更した場合と他の項目も合わせて値に変更があった場合のみでした。 クエリの抽出条件はテーブルA.項目<>テーブルB.項目としています。他の項目もor条件で同じ設定にしています。切り分けのため、このオプショングループの項目だけを変更した場合のクエリにしても反映はされませんでした。 考慮すべき点あればご教示ください。 よろしくお願いいたします。 どうかお助けくださいませm(__)m

  • レコード更新について

    レコード更新について 環境:ACCESS2000 状況:メインフォーム(マスター登録ボタン付)    サブフォーム(マスターテーブルをドラッグして貼り付けたもの)    マスターテーブル(品番 / レンタル日 / 返却日 / 貸出状況) やりたい事:サブフォームに表示してあるデータに       返却日をサブフォーム上で入力し(件数は不定)、そして       返却日が入力されたものの貸出状況を"返却済"と変更登録したい。 現状:コマンドボタンのイベントに Private Sub マスター登録ボタン_Click() Dim db As DAO.Database Dim rs As DAO.Recordset Set db = CurrentDb Set rs = db.OpenRecordset("マスターテーブル", dbOpenDynaset) If rs!返却日 <> "" Then rs.Edit rs!貸出状況 = "返却済" rs.Update End If rs.Close Set rs = Nothing db.Close Set db = Nothing End Sub しかし、上記コードでは返却日はマスターテーブルに反映しているのですが 貸出状況が変わってなく、どのようにしたら良いかわからないため ご質問させて頂きました。 まだまだACCESS勉強中で未熟なため、検討違いなコードになっているかもしれませんが コードの修正・改善、または全く違う方法等ご教授願えればと思います。        

  • フォーム上のテキストボックスにテーブル値を改行代入

    Access2013を使用しています。 フォーム上のテキストボックスにテーブルAの項目Bを複数レコード分を改行しながら 代入したいのです。 Set CN = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open "テーブルA", CN, adOpenStatic, adLockOptimistic Do Until rs.EOF   If rs!項目B <> "" Then    Me!テキストボックス = rs!項目B & vbLf   End If   rs.MoveNext Loop 上記ですと、当たり前ですが最終レコードの項目Bのみがセットされます。 検索ワードがよくないのか、同様の問合せを見つけることができません。 よろしくお願いします。

  • テーブルのレコードが0件時にmsg表示(アクセス)

    とてつもない初歩的な質問で すみません! フォーム1をメニュー画面として、 フォーム1にある「ボタン」を押すと テーブルにレコードが追加され、処理が走る・・・という仕様を作っています。 ですが、 このテーブルにレコードが追加されなかった=0件 の場合の回避策を どうしたら良いのかが わかりません。 ちなみに、 Private Sub ボタン_Click() On Error GoTo errmsg DoCmd.SetWarnings False Dim DB As DAO.Database Dim rs1 As DAO.Recordset Dim rs2 As DAO.Recordset Dim i As Long Set DB = CurrentDb Set rs1 = DB.OpenRecordset("テーブル1") Set rs2 = DB.OpenRecordset("テーブル2", dbOpenDynaset) rs1.MoveFirst Do Until rs1.EOF If rs1!フィールドA1 = rs1!フィールドA2 Then rs2.AddNew rs2!ID = rs1!ID rs2!フィールドA = rs1!フィールドA1 rs2!B = rs1!フィールドB rs2!C = rs1!フィールドC rs2.Update End If If rs1!フィールドA1 < rs1!フィールドA2 Then For i = rs1!フィールドA1 To rs1!フィールドA2 Step 1 rs2.AddNew rs2!ID = rs1!ID rs2!フィールドA = i rs2!フィールドB = rs1!フィールドB rs2!フィールドC = rs1!フィールドC rs2.Update Next i End If rs1.MoveNext Loop rs1.Close: Set rs1 = Nothing rs2.Close: Set rs2 = Nothing DB.Close: Set DB = Nothing Call 次処理 errmsg: MsgBox "元データが未投入です。" End Sub としたのですが、 これでは データが投入され、処理が成功=完了した場合にも エラーメッセージが出てしまいました。 ご教示いただけますと幸いです。 お手数をおかけしますが、よろしくお願い致します。

  • テーブルの更新したい。

    教えてください。 A と Bというテーブルがあり、BのデータをAに更新後、Bのフィールド[最終YMD]に日付をいれたい。 NOW()を使用したい。 下記のようにモジュールを分からないなりに作成したのですが テーブルAは、更新されるのですが 次をどのようにしたら良いかわかりません。 宜しくお願いいたします。 Function DONEW_INP(FORMNAME) 'Dim Q As QueryDef, MyDB As Database, F As Form Dim T1 As Recordset, T2 As Recordset Set MyDB = CurrentDb Set F = Forms(FORMNAME) ' Set Q = MyDB.QueryDefs("INP_MST検索") Q(0) = F("No") Q(1) = F("倉庫No") Q(2) = F("ID") Set T1 = Q.OpenRecordset() Q.Close T1.Edit                         ’テーブルAにテーブルBを更新。 T1("0") = Val_0(T1("0")) + Val_0(F("01")) T1("1") = Val_0(T1("1")) + Val_0(F("11")) T1("2") = Val_0(T1("2")) + Val_0(F("21")) T1.Update T1.Close Set Q = MyDB.QueryDefs("INP_台帳検索") Q(0) = F("No") Q(1) = F("区分") Q(2) = F("種類") Q(3) = F("倉庫No") Set T2 = Q.OpenRecordset() Q.Close 'T2.Edit                  ’Bのテーブルの更新。 'T2("最終YMD") = Now()  'T2.Update 'T2.Close  End Function

  • アクセス2003 空欄の場合のみ更新したい

    すみません教えて下さい。 「テーブルA」というテーブルと「テーブルB」というテーブルがあり、 それぞれに「項目1」と「項目2」があります。 「テーブルB」の内容を元に「テーブルA」を更新したいのですが、 「テーブルA」の「項目2」が空欄の場合のみ、 「テーブルB」の「項目2」の内容を、 「テーブルA」の「項目2」へ登録したいのです。 その際、紐づけのキーとなる項目を「項目1」にしたいです。 OSはWinXP。アクセス2003です。 すみませんが、どのようにすれば良いか教えてもらえるでしょうか。