Несколько проблем.
Set ExDif = Tang.OpenRecordset("Staging_LOG_ExportDifferences")
Set Field01a = ExDif.Fields("a_Client Name")
Set Field01b = ExDif.Fields("b_Client Name")
Set ID = ExDif.Fields("ID")
Этот код начинает читать набор записей, прежде чем станет известно о наличии записей. Если набор записей пуст (т. Е. Набор записей равен BOF
и EOF
), эти последующие назначения завершатся с ошибкой. Эти назначения должны быть внутри цикла чтения-записи.
ExDif.MoveFirst
Вы уже на первой записи; безусловно, на каждой итерации перемещая курсор назад к первой записи, ваш цикл застревает на первой записи. Удалить эту строку.
If Field01a.Value <> Field01a.Value Then
Это выражение всегда будет иметь значение False
, это эвристически-постоянное выражение, скорее всего, опечатка. Было ли это для сравнения Field01a
с Field01b
?
Else: MsgBox "Client Name matches"
'Move to next record (row) in table
ExDif.MoveNext
'End the Else - If
End If
Этот отступ очень вводит в заблуждение и очень, очень подвержен ошибкам. Рассмотрим:
Else
MsgBox "Client Name matches"
ExDif.MoveNext
End If
Теперь, если .MoveNext
условно (в некоторой степени - см. Предыдущий пункт о выражении условия), это проблема: независимо от того, что происходит в теле цикла , вы хотите быть в следующей записи, когда все готово Так что .MoveNext
никогда не должно быть условным.
Это должно исправить:
Set exportDiffs = Tang.OpenRecordset("Staging_LOG_ExportDifferences")
Do Until exportDiffs.EOF
Dim clientNameA As String
clientNameA = exportDiffs.Fields("a_Client Name").Value
Dim clientNameB As String
clientNameB = exportDiffs.Fields("b_Client Name").Value
If clientNameA <> clientNameB Then
'client name mismatch
GoTo Skip
End If
Dim id As Long
id = exportDiffs.Fields("ID").Value
' do stuff...
Skip:
exportDiffs.MoveNext
Loop