首页 > 解决方案 > 如何修复 vba 查找功能上的突然运行时错误“1004”?

问题描述

在部分代码中,我需要找到某个字符串出现在哪一行中,代码中断抛出“1004”错误。这突然开始,最初的代码没有问题。选项显式打开并定义了所有变量!zRow 应该返回最后一行,xSelectC 确实是需要在范围内搜索的字符串。

我尝试过使用 application.match 的方法 - 出现同样的错误,我也尝试用 Range 对象替换(Dim objRng as 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”。

标签: excelvbafunctionfindmatch

解决方案


您应该采取的一般方法是将 Find 返回到 Range 变量中,测试该变量的 Not 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 时它们都会被代码或用户保存。未能设置它们可能会导致意外行为, 请参见此处


推荐阅读