2014-12-31 110 views
0

我有代码,它的功能是将所有在合格/不合格列中具有“失败”的贷款并将条件复制到另一个工作簿。我的问题是,确定合格/不合格的公式要求贷款编号位于其中一个标准列中,否则将返回“错误2023”的值。VBA错误处理:如何绕过有错误的行并停止代码?

随着我的下面的代码,我得到一个类型不匹配的错误,因为“错误2023”。我最初的想法是使用“On Error Resume Next”,以便如果我的值=错误2023它将转到下一行并绕过错误只拉失败......但我是新来的错误处理并不确定如何写这个。这是关于这个问题的正确方法吗?

assignmentRow = 4 
For x = 4 To lastRow 

Windows("POC Results.xlsm").Activate 

If Range("BE" & x).Value = "Fail" Then 'goes through workbook checking for "Fail" 
Range("B" & x, "F" & x).Copy 'copies first criteria and pastes 
Windows("Failed Audit Assigments.xlsm").Activate 
Sheets("POC").Range("B" & assignmentRow).PasteSpecial Paste:=xlPasteValues 

Windows("POC Results.xlsm").Activate 
Range("BF" & x).Copy 'copies 2nd criteria and pastes 
Windows("Failed Audit Assigments.xlsm").Activate 
Sheets("POC").Range("G" & assignmentRow).PasteSpecial Paste:=xlPasteValues 

assignmentRow = assignmentRow + 1 
End If 

Next x 
+0

什么是错误信息? –

+0

这是运行时错误'13'类型不匹配。但是,当我进入我的VBA代码,并突出显示什么值确定它是否匹配“失败”它说错误2023. – arooney88

+2

您是否尝试将'.Value'更改为'.Text',因为您正在匹配字符串? –

回答

3

根据您最近对其他答案的评论,您可以在检查单元格是否包含失败之前检查独立代码行上的错误。

assignmentRow = 4 
    For x = 4 To lastRow 
     Windows("POC Results.xlsm").Activate 
     If Not IsError(Range("BE" & x).Value) Then 'check for cell error value first 
      If Range("BE" & x).Value = "Fail" Then 'goes through workbook checking for "Fail" 
       Range("B" & x, "F" & x).Copy 'copies first criteria and pastes 
       Windows("Failed Audit Assigments.xlsm").Activate 
       Sheets("POC").Range("B" & assignmentRow).PasteSpecial Paste:=xlPasteValues 

       Windows("POC Results.xlsm").Activate 
       Range("BF" & x).Copy 'copies 2nd criteria and pastes 
       Windows("Failed Audit Assigments.xlsm").Activate 
       Sheets("POC").Range("G" & assignmentRow).PasteSpecial Paste:=xlPasteValues 

       assignmentRow = assignmentRow + 1 
      End If 
     End If 
    Next x 

检查单元格中的错误值应该是独立的;与And没有其他标准串在一起。

+0

@ arooney88 - 请记住,VBA中的字符串比较默认为区分大小写;例如* fail *≠* Fail *。 – Jeeped

+0

谢谢!这工作,并在我正在考虑的相同的逻辑。 – arooney88

1

可以使用IsEmpty()函数来确定范围为空的测试,而不是处理错误。

+0

我在'如果范围(“BE”&X“.Value =”Fail“Then')上面输入'On Error Resume Next',并且只是拉出了所有具有REF!错误而不是正确的失败贷款的贷款。如果cell.value =一个错误,它会迭代到下一个x并继续下去,有没有办法获得它? – arooney88