任何人都可以使用range.find方法来帮助我。类型不匹配错误不断出现,我不确定为什么。
我尝试将range变量设置为Range,然后使用Set对其进行定义,并且我也尝试不使用Set,但是随后出现另一个错误。
Dim r1 As Range
Set r1 = Range("B:K").Find("WhatToFind").row
我希望上面的代码能为我提供WhatToFind的行,它肯定在工作表中,但仍然会显示错误。
即使我从最后删除了.Row
,我也会收到此错误:
运行时错误'1004':
应用程序或对象定义的错误
答案 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)
没有工作表。您正在从例如运行此代码一个加载项,或者您试图在图表表上运行此代码。您必须在标签中选择一个工作表。