我有一个程序,一旦它无法在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
答案 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