如何解决vba查找功能上突然出现的运行时错误'1004'?

时间:2019-08-05 10:50:31

标签: excel vba function find match

在代码的一部分中,我需要找到某些String出现在哪一行代码中断,并抛出“ 1004”错误。这突然开始,最初的代码可以正常工作。 显式选项已启用,并且定义了所有变量! zRow应该返回最后一行,xSelectC实际上是需要在范围内搜索的字符串。

我尝试了application.match方法-出现相同的错误, 另外,我尝试用Range对象(Dim objRng作为Range,Set objRng = ws3.Cells(1,“ B”))替换,但是没有运气。

最后,我使用了For循环方法,它起作用了,但是由于这只是更大的代码的一部分,所以有很多部分都使用这种相同的方法,我想避免for循环,实际上普遍理解为什么突然出现此“ 1004”。

vRow = ws3.Range("B1:B" & zRow + 1).Find(What:=xSelectC, After:=ws3.Cells(1, "B"), SearchDirection:=xlNext).Row

它不是(例如)返回第1244行的数字,而是抛出“ 1004”。

1 个答案:

答案 0 :(得分:0)

您应该采取的一般方法是将“查找”返回到Range变量,测试该变量的No Nothing,然后才引用其属性。

类似

Dim rng as Range
Dim research as Range, rAfter As Range

' ...
Set rSearch = ws3.Range("B1:B" & zRow + 1)
Set rAfter=ws3.Cells(1, "B")
Set rng = rSearch.Find(What:=xSelectC, After:=rAfter, SearchDirection:=xlNext)
If rng is Nothing Then
   ' nothing found, what now?
Else
   vRow = rng.Row
   ' rest of your code
End If

请注意,您应该显式设置参数LookIn,LookAt,SearchOrder和MatchBy,因为每次通过代码或用户调用Find时都会保存参数。未能设置它们可能导致意外的行为{{3}}