【问题标题】:error handling while Updating Access Table from Excel从 Excel 更新 Access 表时的错误处理
【发布时间】:2014-04-15 11:59:37
【问题描述】:

嘿,我正在使用此代码从 Excel 文件更新 Access 表。

On Error GoTo Boucle2
row = 1 ' the start row in the worksheet
Do While Not IsEmpty(Worksheets("Temp").Range("A" & row))
    With adoRec
       If Worksheets("Temp").Range("A" & row).Value = "Processed" Then
        .AddNew
        .Fields("TRADE_ID") = Worksheets("Temp").Range("B" & row).Value
        .Fields("Tkt") = Worksheets("Temp").Range("C" & row).Value
        .Update
       ElseIf Worksheets("Temp").Range("A" & row).Value = "AmendValid" Then
        adoRec.Filter = "TRADE_ID='" & Worksheets("Temp").Range("B" & row).Value & "'"
        .Fields("Tkt") = Worksheets("Temp").Range("C" & row).Value
        .Update
      End If
    End With

Boucle2 :
    row = row + 1
    Loop

我想处理一个常见错误...。如果TRADE_ID 已经存在...我得到一个普通的Runtime Error '-2147217887 (80040e21)',它说这个TRADE_ID 已经存在并且它不支持重复。 我想通过转到循环中的下一行来忽略此错误,并可能添加一个 msgbox 说This TRADE_ID already exists

非常感谢

【问题讨论】:

    标签: excel vba ms-access


    【解决方案1】:

    试试这个:

    Sub test()        
        'some code        
        On Error GoTo errHandler
    
        Do While Not IsEmpty(Worksheets("Temp").Range("A" & Row))
            With adoRec
                'add record
            End With            
    Boucle2:
            Row = Row + 1
        Loop        
    
        'some code        
        Exit Sub
    
    errHandler:
        If Err.Number = -2147217887 Then
            MsgBox "This TRADE_ID already exists"
        Else
            MsgBox "Unknown error: " & Err.Description
        End If
        Resume Boucle2        
    End Sub
    

    【讨论】:

      【解决方案2】:

      这将处理该错误 - 您可以自定义处理其他错误。

       On Error GoTo Error_Trap
      Row = 1 ' the start row in the worksheet
      Do While Not IsEmpty(Worksheets("Temp").Range("A" & Row))
          With adoRec
             If Worksheets("Temp").Range("A" & Row).Value = "Processed" Then
              .AddNew
              .Fields("TRADE_ID") = Worksheets("Temp").Range("B" & Row).Value
              .Fields("Tkt") = Worksheets("Temp").Range("C" & Row).Value
              .Update
             ElseIf Worksheets("Temp").Range("A" & Row).Value = "AmendValid" Then
              adoRec.Filter = "TRADE_ID='" & Worksheets("Temp").Range("B" & Row).Value & "'"
              .Fields("Tkt") = Worksheets("Temp").Range("C" & Row).Value
              .Update
            End If
          End With
          Row = Row + 1
      Loop
      Exit Function
      Error_Trap:
      If Err.Number = -2147217887 Then
          MsgBox "When processing Row: " & Row & " - Record already exists for Ticket: " & Worksheets("Temp").Range("C" & Row).Value & vbCrLf & vbCrLf & _
                  "Will skip this record.", vbOKOnly, "Duplicate Record"
          Resume Next
      Else
          MsgBox "Error Encountered - what do you want to do? Add Code..." & vbCrLf & vbCrLf & _
                  "Err: " & Err.Number & vbTab & Err.Description, vbOKOnly, "Error"
          Resume Next
      End If
      

      【讨论】:

        猜你喜欢
        • 2019-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多