Vlookup崩溃程序

时间:2018-03-09 12:51:02

标签: vba excel-vba vlookup excel

我有一个程序,一旦它无法在VLookup中找到条目就会崩溃。

要尝试遵守某些NDA,任何识别信息都将被删除。

LcTg = Cells(i, "K")
Bldg = Mid(LcTg, 1, 1)
Zone = Mid(LcTg, 2, 2)
Aisle = Mid(LcTg, 4, 2)
If Not (IsNumeric(Zone)) Then
    Aisle = Application.VLookup(Zone, Worksheets("ST" & Bldg & " Zones").Range("A2:B100"), 2, False)
    If IsError(Aisle) Then
        Aisle = "N/A"
    End If
End If
Cells(i, nextColumn) = Aisle

这段代码旨在确定区域是否已经过数字识别,在所有情况下都意味着过道已经正确,如果不是,它会搜索一个小表来找到等效的过道,对于字母数字区域,例如A1。

如果不是数百万,这段代码会迭代100,000次。当代码碰到VLookup中没有的东西时,代码会突然停止。

我不是一名专业的程序员,所以请尽可能简单地解释一下。

修改

我添加了小错误处理,它工作正常。我为这是一个如此愚蠢的问题而道歉。

If Not (IsNumeric(Zone)) Then
        On Error Resume Next 'if error, the code will go on anyway
        Aisle = Application.VLookup(Zone, Worksheets("ST" & Bldg & " Zones").Range("A2:B100"), 2, False)
        If Err.Number <> 0 Then
            Aisle = "N/A"
        End If
        On Error GoTo 0 'no error, coming back to default conditions
End If

2 个答案:

答案 0 :(得分:1)

在这种情况下我通常做的是首先使用If application.worksheetfunction.countif([Range],[Value]) > 0 then检查变量是否存在以避免任何错误。

答案 1 :(得分:1)

您只能将Application.VLookup中的不匹配错误捕获到变体中。

dim Aisle as variant
...
Aisle = Application.VLookup(Zone, Worksheets("ST" & Bldg & " Zones").Range("A2:B100"), 2, False)
If IsError(Aisle) Then
    Aisle = "N/A"
End If