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

时间:2018-12-20 10:14:58

标签: excel vba types mismatch

任何人都可以使用range.find方法来帮助我。类型不匹配错误不断出现,我不确定为什么。

我尝试将range变量设置为Range,然后使用Set对其进行定义,并且我也尝试不使用Set,但是随后出现另一个错误。

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

我希望上面的代码能为我提供WhatToFind的行,它肯定在工作表中,但仍然会显示错误。

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

  

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

5 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

您的r1是范围类型,但是

设置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”

答案 2 :(得分:1)

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命令。

答案 3 :(得分:1)

尝试完全限定您的范围(例如public void add() { Node current = head; if (head == null) { for (int i = 0; i < 6; i++) { head.data[i] = numData[i]; } } else while (current != null) { current = current.next; } for (int i = 0; i < 6; i++) { current.data[i] = numData[i]; } }

如果保留为不合格,它将尝试使用Set r1 = Sheet1.Range("B:K").Find("WhatToFind")。例如,如果您查看的是图表表而不是工作表,则将引发1004错误-因为ActiveSheet(作为图表)没有任何要搜索的单元格,列或范围。

答案 4 :(得分:0)

插件?

没有工作表。您正在从例如运行此代码一个加载项,或者您试图在图表表上运行此代码。您必须在标签中选择一个工作表。