我运行这组代码并返回错误:
运行时错误'1004'无法获取WorksheetFunction类的Vlookup属性。
我已经在另一个子例程中有一个vlookup。 这段代码有什么问题吗?我调试,错误出现在那里的策略框。
Sub LinkPolicyNum()
Dim r As Integer
Dim policynum As Variant
Dim lookup_num As Range
Dim policybox As Variant
r = ActiveCell.Row
'Row number of the Selected Cell
policynum = ActiveSheet.Cells(r, 3).Value
Set lookup_num = ThisWorkbook.Sheets("PolicyDetails").Range("a1:z5000")
policybox = Application.WorksheetFunction.VLookup(policynum, lookup_num, 3, False)
'to match the policy number to the policy details
MsgBox policynum
MsgBox policybox
End Sub
答案 0 :(得分:1)
您的代码似乎没有任何问题。您正在查看使用WorksheetFunction
版本的函数时发生的结果,但未返回任何结果。具体来说,它们会抛出错误并中断VBA的执行。在这种情况下,如果您在工作簿中而不是在VBA中尝试了相同的公式,则会出现某种形式的错误(可能是#N/A
或#VALUE!
)。
如果您想阻止这种情况发生,最简单的方法是更改为使用Application.VLookup
而不是Application.WorksheetFunction.VLookup
。虽然没有Intellisense来帮助这个功能,但除了错误处理之外,它的行为与其他功能相同。如果函数的非WorksheetFunction
版本有错误,它将返回错误而不是抛出错误。这允许您检查错误,然后继续使用您的代码。
如果您认为应该在VLOOKUP
找到值,那么您可以开始检查文本/数字与其他类似内容之间的不匹配。我会检查公式而不是VBA。
以下是使用其他功能形式并捕获错误的示例。
Sub LinkPolicyNum()
Dim r As Integer
Dim policynum As Variant
Dim lookup_num As Range
Dim policybox As Variant
r = ActiveCell.Row
'Row number of the Selected Cell
policynum = ActiveSheet.Cells(r, 3).Value
Set lookup_num = ThisWorkbook.Sheets("PolicyDetails").Range("a1:z5000")
policybox = Application.VLookup(policynum, lookup_num, 3, False)
'to match the policy number to the policy details
If IsError(policybox) Then
'possibly do something with the "not found" case
Else
MsgBox policynum
MsgBox policybox
End If
End Sub
此问题的参考:http://dailydoseofexcel.com/archives/2004/09/24/the-worksheetfunction-method/