在 VBA 中使用搜索进行自定义查找

疯狂的AC

我不确定,如何修复此功能。

如果 Isnumber(search) 为真,则从 lookup_table 中获取值

第二轮结束后

excel数据图片

Function Slookup(lookup_value As String, lookup_table As Range) As String

Dim i As Integer
On Error GoTo Err
Dim valuetxt As Boolean
Dim cc As Integer

cc = lookup_table.Rows.Count

For i = 1 To cc
    valuetxt = IsError(Application.WorksheetFunction.Search(lookup_table.Cells(i, 1), lookup_value))
    If Not valuetxt Then
        Slookup = lookup_table.Cells(i, 2)
        Exit Function
    End If
    


Slookup = ExcelError.ExcelErrorNA

Err:

Next i

End Function
衔尾蛇1

Tim Williams 指出IsError()不能捕获运行时错误是正确的(1004)。因此,除了在没有错误的情况下提供必要的信息外,您没有太多IsError()事情。FalseIf Not valuetxt Then

真正的问题在于您的错误处理程序停留在循环中。On Error GoTo Err一旦你已经在里面就不会被触发Err:代码在第三个示例中失败,因为这是您第二次遇到错误。

即在您的第三个示例中,您将收到一个错误IsError(Application.WorksheetFunction.Search("A", "E G F"))并移至Err:. 但是,您并没有退出循环,所以现在您会遇到另一个错误IsError(Application.WorksheetFunction.Search("B", "E G F"))并且事情会发生故障。(因此,您的第二个示例实际上也遇到了错误,但从未遇到过另一个错误。)

您可以按如下方式解决此问题:

Function SlookupAdj(lookup_value As String, lookup_table As Range) As String

Dim i As Integer
Dim valuetxt As Boolean
Dim cc As Integer

cc = lookup_table.Rows.Count

For i = 1 To cc

    On Error Resume Next
    valuetxt = IsError(Application.WorksheetFunction.Search(lookup_table.Cells(i, 1), lookup_value))
    If Err Then
        Err.Clear
    Else
        If Not valuetxt Then
            SlookupAdj = lookup_table.Cells(i, 2)
            Exit Function
        End If
    End If

SlookupAdj = ExcelError.ExcelErrorNA

Next i

End Function

在这个修改后的代码中,我们遇到了同样的错误,但只是跳过它,处理存在错误的事实 ( If Err Then),清除它,然后确保我们永远不会达到If Not valuetxt Then.

同样,蒂姆·威廉姆斯(Tim Williams)指出您正在尝试做的事情是正确的,使用Instr(). 像这样:

Function InstrMethod(lookup_value As String, lookup_table As Range) As String

Dim i As Integer
Dim valuetxt As Boolean
Dim cc As Integer

cc = lookup_table.Rows.Count

For i = 1 To cc

    valuetxt = InStr(lookup_value, lookup_table.Cells(i, 1))
    If valuetxt Then
        InstrMethod = lookup_table.Cells(i, 2)
        Exit Function
    End If
    
Next i

End Function

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章