[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『アクセスとの連携』(のり)
お世話になっております。
アクセスで作成した共有フォルダ上のデータベースとデスクトップ上のエクセルファイルを連携させるマクロを作っています。
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.