我有以下代码,只要在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
答案 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
我的"真实"代码只是介于两条线之间......而这个"真正的"代码当然可以包含处理"特殊"错误,只需要一个简历到另一个位置,如上例所示。