VBAでシートからアクセスのテーブルにデータを追加したい。

前提

WorkSheet(wsStart)からAccessDB(test)に不足するデータを追加したい。
それぞれ日付データを取得して突合させ、データを挿入する。

お知らせ

以前の質問を踏襲して、質問しています。(内容は別)
https://teratail.com/questions/1ib3tvqtd06z80

詳細

Excel

日付 数値1 数値2 数値3 数値4
1/1 1000 2000 1000 2000
1/2 1000 2000 1000 2000
1/3 1000 2000 1000 2000
1/4 1000 2000 1000 2000

Access

日付 数値1 数値2 数値3 数値4
1/1 1000 2000 1000 2000
1/2 1000 2000 1000 2000

目的とするAccessDB

日付 数値1 数値2 数値3 数値4
1/1 1000 2000 1000 2000
1/2 1000 2000 1000 2000
1/3 1000 2000 1000 2000
1/4 1000 2000 1000 2000

データタイプはそれぞれ「日付/時刻型」と「数値型」です。

発生している問題・エラーメッセージ

error

アプリケーション定義およびオブジェクト定義のエラーです。

該当のソースコード

vba

Sub compare_and_copy_date() Dim l As Long, lRow As Long Dim wsStart As Worksheet: Set wsStart = ThisWorkbook.Sheets("start") Dim myConn As New ADODB.Connection myConn.Open ConnectionString:= _ "Provider=Microsoft.ACE.OLEDB.12.0;" & _ "Data Source=C:\Users\test.accdb" Dim myRS As New ADODB.Recordset myRS.Open Source:="test", ActiveConnection:=myConn, _ CursorType:=adOpenDynamic '行すべてを表示 wsStart.Rows.Hidden = False 'Excelを降順に Range(Columns(1), Columns(5)).Sort Range("A1"), xlDescending 'Excelから[日付]列を取得 lRow = wsStart.Cells(Rows.Count, "A").End(xlUp).Row 'Excelデータの最新日付を取得 With myRS For l = 2 To lRow .MoveFirst .Find "日付=#" & Format(wsStart.Cells(l, 1).Value, "yyyy/mm/dd") 'Excelから日付データの取得 If .EOF Then '一致する日付がなければ、行データ追加 .AddNew !日付.Value = wsStart.Cells(l, 1) !数値1.Value = wsStart.Cells(l, 2) !数値2.Value = wsStart.Cells(l, 3) !数値3.Value = wsStart.Cells(l, 4) !数値4.Value = wsStart.Cells(l, 5) .Update End If Next l End With myRS.Close: Set myRS = Nothing myConn.Close: Set myConn = Nothing End Sub

試したこと

・.MoveNextなどで調整:インデックス(日付)などを取得していると考えたため。
・取得の確認:Debug.Printでエクセル上の日付データなどが取得できているか確認。
・文法の確認:もう一度見直しや意味があっているのか確認した。

コメントを投稿

0 コメント