我在更改事件子程序中运行VLookup时遇到问题。我已经测试了所有其他代码行,并确保它们正常工作,因此只有VLookup才能正常工作。
简要介绍背景,我有两张纸。 Sheet1包含ID(它可以在单独的行上有多个ID,因此下面使用SPLIT函数),Sheet 2包含ID及其描述。我想要做的是在值更改时执行VLookup并将每个ID的描述插入到单元格中作为注释。
对我不起作用的一行是:Application.WorksheetFunction.VLookup(IDs(i), Sheet2.Range("A3:B30"), 2, False)
。
我没有收到任何错误,但它跳转到exitHandler而没有运行逻辑提醒。我确定该表存在于VLookup的表中。如果有人能帮助我指出它为什么不起作用,我将非常感激!
以下是使用VLookup的代码片段:
With Target
If .Comment Is Nothing Then
'do nothing
Else
.Comment.Delete
End If
If Target.Value = "" Then
.Comment.Delete
Else
If InStr(Target.Value, vbCrLf) = 0 Then
IDs = Split(Target.Value)
Else
IDs = Split(Target.Value, vbCrLf)
End If
For i = LBound(IDs) To UBound(IDs)
If commentText = "" Then
'Add description for ID as comment
commentText = Application.WorksheetFunction.VLookup(IDs(i), Sheet2.Range("A3:B30"), 2, False)
Else
'Keep on adding description for each ID as comment
commentText = commentText & vbCrLf & Application.WorksheetFunction.VLookup(IDs(i), Sheet2.Range("A3:B30"), 2, False)
End If
Next
.AddComment Text:=commentText
.Comment.Shape.TextFrame.AutoSize = True
End If
End With
exitHandler:
Application.EnableEvents = True
End Sub
答案 0 :(得分:0)
由于缺少变量定义的一部分,我猜测commentText被定义为String
。如果Vlookup
执行没有匹配的搜索,则会返回错误,因此必须将变量定义为Variant
,否则会出现类型不匹配的情况。使用On Error Goto
- Statement时,您不会看到错误。如果没有错误发生,你应该在Vlookup
之后检查,即使用IsError
- 函数。
答案 1 :(得分:0)
非常感谢您的回复。实际上,它应该是Application.VLookup而不是Application.WorksheetFunction.VLookup。我还必须将ID(I)转换为CLng以防止2042错误。要查看错误代码,还需要将commentText更改为Variant。
最后,这对我有用:
Application.VLookup(CLng(IDs(i)), Sheet2.Range("A3:B30"), 2, False)
再次感谢您的帮助!