VBA搜索指定范围匹配字符串时出现对象未设置错误
VBA查找范围报错“Object variable or With block variable not set”的解决方法
错误核心原因
当Range.Find方法未找到匹配值时,会返回Nothing(空对象),此时直接调用.Address属性就会触发“对象变量或With块变量未设置”的错误——原代码完全没处理查找失败的情况。
次要问题
- 子过程
FindSomethingInRange中的i2变量未定义,运行时会被当作变体类型,若未赋值会导致引用单元格出错。 - 函数中
Find方法的代码被拆分成多行,VBA中必须用下划线_连接多行语句,否则会触发编译错误。
修复后的完整代码
Sub FindSomethingInRange() Dim sSearchFor As String Dim rSearchRange As Range Dim i2 As Integer ' 定义i2变量,根据实际业务逻辑赋值 ' 示例:给i2赋值,需替换为你的实际取值逻辑 i2 = 1 sSearchFor = Worksheets("MatchupCalc").Range("E" & i2).Value Set rSearchRange = ThisWorkbook.Sheets("Ladder").Range("AP38:AX38") Debug.Print FindValueInCellRange(rSearchRange, sSearchFor) End Sub Function FindValueInCellRange(MyRange As Range, MyValue As Variant) As String '---> PURPOSE: Returns address of first cell in range where the value is found. Dim foundCell As Range With MyRange Set foundCell = .Find(What:=MyValue, After:=.Cells(.Cells.Count), _ LookIn:=xlValues, LookAt:=xlWhole, SearchOrder:=xlByRows, _ SearchDirection:=xlNext) End With ' 分情况处理查找结果 If Not foundCell Is Nothing Then FindValueInCellRange = foundCell.Address(RowAbsolute:=False, ColumnAbsolute:=False) Else FindValueInCellRange = "未找到匹配值" ' 也可返回空字符串"" End If End Function
关键修改点
- 新增
foundCell变量接收Find方法的返回值,先判断是否为Nothing再访问.Address,避免空对象报错。 - 定义
i2变量并示例赋值,消除未定义变量的隐患。 - 用下划线
_连接Find方法的多行语句,修复编译错误。
内容的提问来源于stack exchange,提问作者Lauren Quantrell
相关产品推荐
相关产品推荐

