我正在尝试创建一个工作表,我可以在其中键入一个文本值,并自动填充与另一个字符串列表中最接近的匹配项。
我尝试在VBA中使用VLOOKUP函数,并将第4个参数设置为TRUE,以查找部分匹配项。我也尝试过仅在excel中而不是VBA中使用VLOOKUP函数。结果是我想要的一半,比方说,我在单元格中输入“ cookie”,该函数返回“ Cleaning Supplies”,因为它们都以C开头。理想情况下,我希望它返回Chocolate Cookie或类似的东西那个。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
Set KeyCells = Range("A:A")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
Target.Value = Application.WorksheetFunction.VLookup(Target.Value, Worksheets("StorageLocations").Range("A:A"), 1, True)
End If
End Sub
代码部分起作用,并返回运行时错误Method 'Range' of object_ '_Worksheet' failed
。它还只会返回前面的清洁用品评论。
感谢您的帮助。
答案 0 :(得分:1)
尝试:
Private Sub Worksheet_Change(ByVal Target As Range)
Call fnd(Target)
End Sub
Sub fnd(rng As Range)
Application.EnableEvents = False
If rng.Column = 1 Then
If Not Worksheets("StorageLocations").Range("A:A").Find(rng) Is Nothing Then
rng.Value = Worksheets("StorageLocations").Range("A:A").Find(rng.Text).Value
End If
End If
Application.EnableEvents = True
End Sub
说明:
Enable Events
来更改工作表中的值,否则在更改单元格值时它将不断触发更改事件。 演示: