使用 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
作为图表,没有任何要搜索的单元格、列或范围。
谁能帮我使用 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
作为图表,没有任何要搜索的单元格、列或范围。