首页 > 解决方案 > 使用 range.find 方法时出现类型不匹配错误

问题描述

谁能帮我使用 range.find 方法。类型不匹配错误不断出现,我不知道为什么。

我尝试将范围变量设置为 Range,然后使用 Set 来定义它,我也尝试过不使用 Set,但随后又出现了另一个错误。

Dim r1 As Range
    Set r1 = Range("B:K").Find("WhatToFind").row

我希望上面的代码能给我 WhatToFind 的行,它肯定在工作表中,但仍然给出错误。

即使我.Row从最后删除,我也会收到此错误:

运行时错误“1004”:
应用程序或对象定义错误

标签: excelvbatypesmismatch

解决方案


您需要先检查是否找到了某些东西,然后才能从中返回任何东西。

Sub Test()

    Dim r1 As Range
    Dim lFoundRow As Long
    Set r1 = Range("B:K").Find("WhatToFind")
    If Not r1 Is Nothing Then
        MsgBox "WhatToFind is on row " & r1.Row
        lFoundRow = r1.Row
    Else
        MsgBox "Not found"
    End If

End Sub  

我怀疑这是错误的原因,但会FIND记住上次使用时的设置(通过代码或在工作表上手动使用Ctrl+F)。

您可以在 上设置每个参数FIND

Sub Test()

    Dim r1 As Range
    Dim lRow As Long

    With ThisWorkbook.Worksheets("Sheet1").Range("B:K")
        Set r1 = .Find( _
            What:="WhatToFind", _
            After:=.Cells(1, 1), _
            LookIn:=xlValues, _
            LookAt:=xlWhole, _
            SearchOrder:=xlByRows, _
            SearchDirection:=xlNext, _
            MatchCase:=False, _
            MatchByte:=False, _
            SearchFormat:=False)

        If Not r1 Is Nothing Then
            lRow = r1.Row
        Else
            MsgBox "Not found"
        End If
    End With

End Sub

推荐阅读