[[20210424045722]] 『アクセスとの連携』(のり) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『アクセスとの連携』(のり)

お世話になっております。
アクセスで作成した共有フォルダ上のデータベースとデスクトップ上のエクセルファイルを連携させるマクロを作っています。

SQL文のSELECTやINSERTを使った操作は問題なく出来たのですが、如何せん動作が非常に遅く(これは単純にサーバーの問題)、色々調べていたところ、SQL文を使わずにRecordSetオブジェクトのAddNew、Updateメソッドを使った方が速いという記述を見つけました。

速度が改善されるかどうかはともかくとして、見た目もSQL文よりずっとシンプルでこちらを使いたいのですが、フィールド名を変数で指定するところで躓いています。どのように書けば良いのか、ご教示願えますでしょうか。

    Sub レコードを追加する()

    Dim strFileName As String
    strFileName = "サンプルDB.accdb"

    Dim adoCn As Object 'ADOコネクションオブジェクト
    Set adoCn = CreateObject("ADODB.Connection") 'ADOコネクションオブジェクトを作成
    adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\" & strFileName & ";" 'Accessファイルに接続

    Dim adoRs As Object 'ADOレコードセットオブジェクト
    Set adoRs = CreateObject("ADODB.Recordset") 'ADOレコードセットオブジェクトを作成

    With adoRs
        .Open "テーブル", adoCn, 1, 3 'レコードセットを開く(引数:CursorType=adOpenKeyset, LockType=adLockOptimistic)

        .AddNew
            '!文字A = "New文字A"'  サンプルコード

        '///////////////////////////////////////////////

            '試したこと:

            Dim s As String
            's = "!文字A" '  パターン1
            's = "文字A" '  パターン2、3

            's = "New文字A" '  パターン1:エラーは出ないがフィールド文字Aだけ入力されない
            '!s = "New文字A" '  パターン2:実行時エラー(要求された名前、または序数に対応する項目がコレクションで見つかりません)
            '! & s ="New文字A"'  パターン3:コンパイルエラー

        '////////////////////////////////////////////////

            !文字B = "New文字B"
            !数値A = 111
            !数値B = 222
            !日付B = #12/30/2020#
            !日付A = #12/30/2021#
        .Update

        .Close 'レコードセットのクローズ

    End With

    adoCn.Close 'コネクションのクローズ

    Set adoRs = Nothing
    Set adoCn = Nothing  'オブジェクトの破棄

    End Sub

 参考にしたサイト:
エクセルVBAでAccessデータベースに複数のレコードを追加する方法とその実行速度について/いつも隣にITのお仕事
https://tonari-it.com/excel-vba-access-add-records/

< 使用 Excel:unknown、使用 OS:unknown >


 おはようございます。
試せないのでググってみました。
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q14106105684
https://www.feedsoft.net/access/guide-vba/guide14.html
(SoulMan) 2021/04/24(土) 07:45

ご回答ありがとうございます。
すみません、自分でも一応ググってみたつもりが、検索ワードが悪かったみたいです。
↓で普通に通りました。

 Dim s As String: s = "文字A"
 .Fields(s) = "New文字A"

accessVBAを知らないので「!」って何!?と思って身構えてしまったのですが、お手数をお掛けして申し訳ありません。

(のり) 2021/04/24(土) 09:37


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.