Excel VBA查找表格值时遇'Object Required'等错误求助
解决Excel VBA中Find方法判断空值的错误问题
你的核心问题出在直接调用Find方法的.Row属性——当Find找不到匹配值时,它返回的是Nothing(一个空对象),这时候去访问.Row就会直接抛出"Object Required"或者"Object variable not set"的错误,根本到不了后面的If判断环节。
正确的处理步骤:
- 先把Find的结果赋值给一个
Range类型的变量,而不是直接取行号 - 判断这个Range变量是否为
Nothing,来确定是否找到匹配值 - 如果找到,再去获取它的行号;如果没找到,再执行添加新行的操作
修正后的代码:
Dim findResult As Range Dim tblrow As Long ' 找到的话存行号,用Long类型更合适 ' 先执行Find,把结果存到Range变量里 Set findResult = tbllook.Range.Columns(1).Cells.Find(shtfind, SearchOrder:=xlByRows, SearchDirection:=xlPrevious) If findResult Is Nothing Then ' 没找到匹配值,添加新行并赋值 Dim newRow As ListRow Set newRow = tbllook.ListRows.Add ' 先添加行,再赋值更稳妥 newRow.Range(1) = shtfind Else ' 找到的话,获取行号并弹窗提示 tblrow = findResult.Row MsgBox "找到匹配值,行号:" & tblrow End If
关键细节说明:
- 为什么原来的代码报错?:当Find返回
Nothing时,你直接写.Row相当于在一个空对象上调用属性,VBA不允许这么做,必须先判断对象是否存在。 - 为什么用Range变量存结果?:Find方法的返回值本身就是Range类型(找到时)或Nothing(没找到时),直接用Range变量接收才能正确完成空值判断。
- 添加行的顺序调整:原来的代码是先给最后一行赋值再添加行,这会导致新添加的行是空的;先调用
ListRows.Add获取新行对象,再给它的单元格赋值,逻辑更清晰也不容易出错。
内容的提问来源于stack exchange,提问作者AmatureMarco
相关产品推荐
相关产品推荐

