Никто действительно не ответил на ваш вопрос.
Скажите, что ваш код выглядит примерно так (скелетная структура):
Public Sub MySub()
On Error GoTo errHandler
Dim rs As DAO.Recordset
Set rs = CurrentDB.OpenRecords([SQL SELECT])
If rs.RecordCount >0 Then
rs.MoveFirst
Do Until rs.EOF
[do whatever that produces the error]
errSkipToNext:
rs.MoveNext
Loop
End If
exitRoutine:
If Not (rs Is Nothing) Then
rs.Close
Set rs = Nothing
Exit Sub
errHandler:
Select Case Err.Number
Case X, Y, Z ' where these are error numbers you want to ignore
Err.Clear
' do whatever it is you need to do in order to record the offending row
Call RecordError(rs!PK, Err.Number) ' PK is a field that identifies the bad record
GoTo errSkipToNext
Case Else
MsgBox Err.Number & ": " & Err.Description, vbExclamation, _
"Error!"
Resume exitRoutine
End Select
End Sub
В этом коде вы используете SELECT CASE в своей ошибкеобработчик, чтобы решить, какие ошибки вы хотите игнорировать.В приведенной выше структуре кода я перечислил номера ошибок как X, Y, Z
, но вы заменили бы их реальными номерами ошибок, которые вместо этого хотите игнорировать.
Вы не хотите игнорировать каждую ошибкупотому что вы могли бы в конечном итоге игнорировать важные ошибки в другом месте вашей подпрограммы.Если вы не хотите выяснять, каково ограниченное число ошибок, которые вы хотите игнорировать, я бы предложил установить флаг в начале блока кода, который генерирует ошибки, которые вы хотите игнорировать, а затем использовать`If bolErrorInCodeBlockToIgnore Then, чтобы решить, игнорируете ли вы все ошибки или нет.Примерно так:
Public Sub MySub()
On Error GoTo errHandler
Dim rs As DAO.Recordset
Dim bolErrorInCodeBlockToIgnore As Boolean
Set rs = CurrentDB.OpenRecords([SQL SELECT])
If rs.RecordCount >0 Then
rs.MoveFirst
Do Until rs.EOF
bolErrorInCodeBlockToIgnore = True
[do whatever that produces the error]
errSkipToNext:
rs.MoveNext
Loop
End If
exitRoutine:
If Not (rs Is Nothing) Then
rs.Close
Set rs = Nothing
Exit Sub
errHandler:
If bolErrorInCodeBlockToIgnore Then
Err.Clear
' do whatever it is you need to do in order to record the offending row
Call RecordError(rs!PK, Err.Number) ' PK is a field that identifies the bad record
bolErrorInCodeBlockToIgnore = False
GoTo errSkipToNext
Else
MsgBox Err.Number & ": " & Err.Description, vbExclamation, _
"Error!"
Resume exitRoutine
End If
End Sub
Я бы предпочел первое, поскольку я твердо верю только в игнорирование известных ошибок, а не в любую старую ошибку, которая случается.Но может быть довольно сложно придумать тесты, которые будут выдавать все возможные ошибки, которые вы хотите игнорировать.