私の以前のタイトルはそこで少し混乱を引き起こしました...最近、VBAを使用してExcelとAccessをブリッジしているときにこの問題に遭遇しました。
Access データベースにインポートする必要があるテーブルを含むスプレッドシートがあります。この表は、次のような一般的なものです。
EmployeeNumber Unused_Field2 Unused_Field3
1 @@@ @@@
2 @@@ @@@
3 @@@ @@@
Access の一意のキーは EmployeeNumber に設定されています。
Excel の VBA コードは次のようになります。
Sub test()
Dim con As ADODB.Connection
Dim rst As ADODB.Recordset
strcon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\temp\mydb.mdb;"
strsql = "SELECT * FROM Table1"
Set con = New Connection
Set rst = New Recordset
con.Open strcon
rst.Open strsql, strcon, adOpenStatic, adLockOptimistic
For i = 0 To n
On Error GoTo Errhdl
rst.AddNew Array("Field1", "Field2", "Field3"), Array(Range("A" & i), Range("B" & i), Range("C" & i))
On Error GoTo 0
Next
Exit Sub
Errhdl:
Debug.Print "Record" & i & "caused an error"
Resume Next
End Sub
残念ながら、データは高品質ではないため、値が重複していて、常にキー違反が発生することがよくあります。Resume Next はエラーをクリアして、別の「AddNew」を実行できるようにしましたが、そうではありませんでした。1 つのキー違反の後に続くすべてのエントリは、同じエラーを返します。
だから私の質問は次のとおりです。
- レコードセットに関連付けられたエラーをクリアする方法はありますか? (レコードについては、「エラー コレクション」を取得しようとして、メソッド Errors.Clear を使用しました。それではうまくいきませんでした。エラー コレクションは、ADO オブジェクトに固有のプロパティです - MSDN エラー コレクション)
- これは、レコードセットを閉じて再度開かずに実行できますか?
さらに説明が必要な場合はお知らせください。