【问题标题】:vba - how to go to next interation in loop when errorvba - 错误时如何在循环中进行下一次迭代
【发布时间】:2018-07-24 08:07:47
【问题描述】:

我有以下代码,当在 Vlookup 公式中发现错误时,我无法跳到下一个交互 (i)。它给了我错误“编译错误子或未定义函数”

例如,如果 Vlookup 公式在第二次交互 (i=2) 中出现错误,则代码应跳过下一行代码并转到下一次交互 (i=3)

For i = 1 To 10:
   If Range("A" & i).Value = "" Then
Else

    On Error GoTo Handler

    datavalue = Application.WorksheetFunction.VLookup(Sheets("DataManipulation").Range("A" & i), Sheets("ExtractQ1").Range("A1:G1048576"), 4, False)

    Sheets("DataManipulation").Range("B" & i).Value = datavalue

Handler:
   Next i

   End If

Next i

【问题讨论】:

  • 如果您使用Dim datavalue as variant,您可以使用iserror(datavalue) 存储和测试错误——但您需要使用Application.vlookup() 而不是Application.worksheetfunction.vlookup(),这样错误不会破坏代码。但是,我的评论与您遇到的错误都不匹配。
  • 另外,检查这两个工作表/范围(查找值和查找表)是否存在。看看您是否可以最小化查找表的范围,因为现在您似乎正在检查至少 100 万个单元格。

标签: vba for-loop error-handling


【解决方案1】:

我会使用On Error Resume Next:

For i = 1 To 10:
   If Range("A" & i).Value = "" Then

   Else
      On Error Resume Next
      datavalue = Application.WorksheetFunction.VLookup(Sheets("DataManipulation").Range("A" & i), Sheets("ExtractQ1").Range("A1:G1048576"), 4, False)
      If Err = 0 Then
          Sheets("DataManipulation").Range("B" & i).Value = datavalue
      End If
      On Error Goto 0 ' Reactivate normal error reporting
   End If    
Next i

【讨论】:

    【解决方案2】:

    您可以利用 Application.VLookUp 并检查其返回值是否为错误:

    dim dataValue As Variant
    For i = 1 To 10
        If Range("A" & i).Value <> "" Then
            dataValue = Application.VLookup(Sheets("DataManipulation").Range("A" & i), Sheets("ExtractQ1").Range("A1:G1048576"), 4, False)
            If Not IsError(dataValue) Then Sheets("DataManipulation").Range("B" & i).Value = dataValue
        End If
    Next i
    

    【讨论】:

      猜你喜欢
      • 2015-05-03
      • 2017-01-15
      • 2021-07-11
      • 2014-01-07
      • 1970-01-01
      • 2018-12-08
      • 2019-06-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多