SQLを実行している部分を書き換えます
Sub 単価転送()
Dim DBpath As String
Dim adoCn As Object
Dim strSQL As String
Dim henDB As String
Dim i As Long
Dim ws_2 As Worksheet
Set ws_2 = Worksheets("転送用シート")
henDB = Worksheets("Sheet1").Range("D1")
Set adoCn = CreateObject("ADODB.Connection")
DBpath = ThisWorkbook.Path & henDB ' パスを確認
adoCn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBpath & ";"
With ws_2
i = 2
Do Until .Cells(i, "K") = ""
strSQL = "UPDATE Q_単価更新用 SET 仕入=" & .Cells(i, "I") & " WHERE 更新合成キー ='" & .Cells(i, "K").Value & "'"
'// ここを調査用のコードに書き換える
' adoCn.Execute strSQL
Dim RecordsAffected As Long
adoCn.Execute strSQL, RecordsAffected
If RecordsAffected = 0 Then
Debug.Print strSQL
Stop
End If
'//ここまで
i = i + 1
Loop
End With
adoCn.Close
Set adoCn = Nothing
End Sub
RecordsAffected
省略可能です。 この操作の影響を受けたレコード数をプロバイダーが返す長整数型 ( Long ) の値です。
ヘルプによればRecordsAffected
にUPDATEで更新されたレコード数が入るはずなので、期待通り更新されれば「1」、更新されなければ「0」となっているはずなので、「0」の時だけイミディエイトウィンドウにstrSQL
の値を書き出し、つづくStop
行でVBAの実行が中断されます
または、Stop
行は記述せずに、i
の値と合わせてすべて処理させてから確認してもいいでしょう
Dim RecordsAffected As Long
adoCn.Execute strSQL, RecordsAffected
If RecordsAffected = 0 Then
Debug.Print i; strSQL
End If
イミディエイトウィンドウの表示は100行までなので、「うまく更新されないデータ」が100件を超える場合は注意してください
通報 ...