使用 range.find 方法时出现类型不匹配错误

Type Mismatch error when using range.find method

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

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

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

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

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

Run-time error '1004':
Application or Object defined error

您的 r1 是范围类型,但是

Set r1 = Range("B:K").Find("WhatToFind").row - 不是范围。是数字。

使用

Set r1 = Range("B:K").Find("WhatToFind")
dim r1row
r1row = r1.row

dim lR as long
lR = Range("B:K").Find("WhatToFind").Row

但请记住,Range("B:K").Find("WhatToFind") 可以是 "Nothing"

Row属性是long类型,表示行号,不是行(Range)对象本身

如果你想要行对象,你可能想要 EntireRow

Dim r1 As Range
Dim r2 as Long
Set r1 = Range("B:K").Find("WhatToFind").EntireRow
r2 = Range("B:K").Find("WhatToFind").Row

澄清一下,虽然您可能已经知道这一点,但 set 仅用于引用类型。由于 long 是值类型,因此您不使用 set 命令。

您需要先检查是否找到了某些内容,然后才能return 从中获取任何内容。

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

加载项?

没有作品sheet。您正在 运行 从例如一个加载项,或者您正在尝试 运行 图表 sheet 上的此代码。您必须 select 在选项卡中 sheet 一个作品。

尝试完全限定您的范围(例如 Set r1 = Sheet1.Range("B:K").Find("WhatToFind")

如果你让它不合格,它会尝试使用ActiveSheet。例如,如果您查看的是图表表而不是工作表,那么这将引发 1004 错误 - 因为 ActiveSheet 作为图表,没有任何要搜索的单元格、列或范围。