gpt4 book ai didi

excel - VBA-Excel : Vlookup crashes my program when no match found

转载 作者:行者123 更新时间:2023-12-02 10:13:56 26 4
gpt4 key购买 nike

在我的程序中,用户输入邮政编码并获取与邮政编码(省、市、区)相关的输出信息。为此,我使用 Vlookup 函数。所以,用户:

  1. 在主表单中输入邮政编码
  2. 程序在数据库(在另一张表格中)中进行搜索,其中邮政编码与城市、省、区相关联。
  3. 当有匹配时,它将结果发送到主页,这样用户只需输入邮政编码即可获得城市、省份、地区。过程非常简单。

我使用此代码来执行此操作:

If Range("J9").Value <> "N/A" Then 'if there is actually a zip code entered by the user (if not, it will be "N/A")
cityZip = Application.WorksheetFunction.VLookup(sMain.Range("J9").Value,
sZipCodes.Range("B2:E864"), 3, False)
barangayZip = Application.WorksheetFunction.VLookup(sMain.Range("J9").Value,
sZipCodes.Range("B2:E864"), 2, False)
provinceZip = Application.WorksheetFunction.VLookup(sMain.Range("J9").Value,
sZipCodes.Range("B2:E864"), 4, False)
sMain.Range("J7").Value = provinceZip
sMain.Range("J13").Value = cityZip
sMain.Range("J16").Value = barangayZip
Else
End If

当我的数据库中有邮政编码时,它可以完美地工作。但如果没有,它会导致程序的执行崩溃,并且出现错误消息(例如“执行错误'1004',无法读取 Vlookup ...)。如何修改我的代码以仅说明如果没有匹配项,那么它应该什么都不做?我不知道如何在Vlookup函数中引入这个请求。

提前致谢!

编辑:这是我遵循蒂姆·威廉姆斯建议后的新代码:

'Using Zip Code
If Range("J9").Value <> "N/A" Then
provinceZip = Application.Lookup(sMain.Range("J9").Value, sZipCodes.Range("B2:E907"), 4, False)

If IsError(provinceZip) = False Then
cityZip = Application.Lookup(sMain.Range("J9").Value, sZipCodes.Range("B2:E907"), 3, False)
barangayZip = Application.Lookup(sMain.Range("J9").Value, sZipCodes.Range("B2:E907"), 2, False)

sMain.Range("J7").Value = provinceZip
sMain.Range("J13").Value = cityZip
sMain.Range("J16").Value = barangayZip
Else
'do nothing
End If

End If

我的错误在这一行:

provinceZip = Application.Lookup(sMain.Range("J9").Value, sZipCodes.Range("B2:E907"), 4, False)

=> 错误 1004,参数数量无效

最佳答案

您应该阅读 VBA 错误处理。来源如http://www.cpearson.com/excel/errorhandling.htm可能有帮助。也就是说,请尝试以下代码。

你想要这样的东西:

Public Function SafeVlookup(lookup_value, table_array, _
col_index, range_lookup, error_value) As Variant
On Error Resume Next
Err.Clear
return_value = Application.WorksheetFunction.VLookup(lookup_value, _
table_array, col_index, range_lookup)
If Err <> 0 Then
return_value = error_value
End If

SafeVlookup = return_value
On Error GoTo 0
End Function

在您的代码中,您可以这样调用它:

cityZip = SafeVlookup(sMain.Range("J9").Value, sZipCodes.Range("B2:E864"), 3, _
False, "")

最后一个参数是 vlookup 失败时返回的默认值。所以在这个例子中它将返回一个空字符串。

关于excel - VBA-Excel : Vlookup crashes my program when no match found,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17100782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com