如何在错误时自动输入值而不是跳过?

时间:2015-09-24 09:34:41

标签: excel-vba vba excel

我有以下代码,只要在Gi表单中找到Articles,就会有效。如果找不到Gi,则会收到错误消息。我可以使用On Error Resume Next跳过错误,但我希望能够在此处自动输入值。有关如何的任何建议?我发现文档会出错,但是会停止FOR循环。

LastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To LastRow
    Range("N" & i).Value = Application.WorksheetFunction.VLookup(Range("G" & i), Sheets("Articles").Range("A2:B5000"), 2, False)
Next i

1 个答案:

答案 0 :(得分:2)

在这种情况下,您可以使用on error goto语句和简历。 在示例代码中,我只是在一行中捕获了该行的错误,所有其他错误都由msgbox处理。

LastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To LastRow
    On Error Goto ErrorNext
    lookupValue = Application.WorksheetFunction.VLookup(Range("G" & i), _
      Sheets("Articles").Range("A2:B5000"), 2, False)
    On Error Goto ErrorHandler
ResumeHere:
    Range("N" & i).Value = lookupValue
Next i

'-------- All of your other code goes here  ------------

Exit Sub
ErrorNext:
    lookupValue = "Some default value"
    Resume ResumeHere
ErrorHandler:
    MsgBox "Another Error occured: " & error

如果您不想要"默认"错误处理程序,然后用On Error Goto 0替换On Error goto ErrorHandler。否则,如果你的For循环之后出现错误,你将创建一个很好的无限循环......

所以没有错误处理程序,除了那一行代码看起来像这样:

LastRow = Cells(Rows.Count, "A").End(xlUp).Row
For i = 2 To LastRow
    On Error Goto ErrorNext
    lookupValue = Application.WorksheetFunction.VLookup(Range("G" & i), _
      Sheets("Articles").Range("A2:B5000"), 2, False)
    On Error Goto 0
ResumeHere:
    Range("N" & i).Value = lookupValue
Next i

'-------- All of your other code goes here  ------------

Exit Sub
ErrorNext:
    lookupValue = "Some default value"
    Resume ResumeHere

基本上没有错误处理程序的代码总是很糟糕。我个人写的所有代码都是这样的:

  On Error Goto ErrorHandler
'----------------------------------------

' Here is the real code

'----------------------------------------
EndSub:
  Exit Sub
ErrorHandler:
  '- Do my error handling here, at least show a "better" message
  MsgBox "An error occured: " & Error & " in line " & Erl
  Resume EndSub

我的"真实"代码只是介于两条线之间......而这个"真正的"代码当然可以包含处理"特殊"错误,只需要一个简历到另一个位置,如上例所示。