在我的程序中,用户输入一个邮政编码,并获取与邮政编码(省、市、区)相关的输出信息。为此,我使用了 Vlookup 函数。所以,用户:
- 在主工作表中输入邮政编码
- 在其中邮政编码与城市、省、区相关联的数据库(在另一张表中)中的程序搜索。
- 当匹配时,它将结果发送到主页,因此用户只需输入邮政编码即可获得城市、省、区。很简单的过程。
我使用此代码这样做:
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 函数中引入这个请求。
提前致谢 !
编辑:这是我的新代码,遵循 Tim Williams 的建议:
'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,参数数量无效