为什么VLookup没有在Event Change子系统中运行

时间:2017-08-24 01:47:42

标签: excel-vba vba excel

我在更改事件子程序中运行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

2 个答案:

答案 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) 

再次感谢您的帮助!