如何在VBA中使用Find函数查找预定义变量?报错求助
解决VBA Find函数查找拼接字符串时报错“运行时错误'91'”的问题
我来帮你搞定这个问题!你遇到的运行时错误'91',本质是Find方法没找到匹配的内容,返回了空对象(Nothing),这时候直接去访问.Row属性肯定会报错——毕竟你不能对一个不存在的对象操作嘛。
下面咱们一步步排查解决:
1. 给Find方法加上明确参数,避开默认值的坑
VBA的Find有很多隐藏的默认参数,这些参数会继承上一次查找的设置(不管是手动还是代码里的),很可能导致明明内容存在却找不到。所以咱们显式指定关键参数更稳妥:
Dim TickerFound As Range Set TickerFound = HBWS.Cells.Find( _ What:=TickerString, _ LookIn:=xlValues, ' 查找单元格显示的实际值,而非公式 LookAt:=xlWhole, ' 完全匹配整个单元格内容,避免部分匹配的情况 MatchCase:=False ' 不区分大小写,可根据你的实际需求调整 )
2. 先判断是否找到结果,再获取行号
拿到TickerFound之后,先检查它是不是空对象,再去获取行号,这样就不会触发报错了:
If Not TickerFound Is Nothing Then TickerRow = TickerFound.Row ' 这里写找到目标行后的后续处理逻辑 Else MsgBox "未找到匹配的内容:" & TickerString, vbExclamation ' 未找到时可以给用户提示,或者添加其他兜底处理 End If
3. 额外排查几个容易踩的小坑
- 检查字符串是否有隐藏字符:比如你看到的是“Total AAPL”,但实际单元格里可能有空格、全角空格或者其他不可见字符,导致拼接后的字符串不匹配。可以用
Trim处理一下股票代码:TickerString = "Total " & Trim(TTB) - 缩小查找范围:如果整个工作表查找太宽泛,你可以限定到具体列,比如你之前找到的
BorrowColumn所在列,或者你确定的目标列:Set TickerFound = HBWS.Columns(2).Find(...) ' 示例:限定在第二列查找 - 确认工作表状态:确保
Hoenheimm Worksheet是可见的,没有被保护,不然也可能影响查找结果。
最后把这些整合到你的代码里,修改后的完整版本大概是这样:
Dim HBWS As Worksheet Dim TickerString As String Dim TickerFound As Range Dim BorrowColumn As Long, TickerRow As Long TickerString = "Total " & Trim(TTB) Set HBWS = Sheets("Hoenheimm Worksheet") ' 查找Borrow列也加上明确参数,更稳妥 BorrowColumn = HBWS.Cells.Find( _ What:="Borrow", _ LookIn:=xlValues, _ LookAt:=xlWhole _ ).Column ' 查找拼接后的目标字符串 Set TickerFound = HBWS.Cells.Find( _ What:=TickerString, _ LookIn:=xlValues, _ LookAt:=xlWhole, _ MatchCase:=False _ ) ' 判断是否找到并处理 If Not TickerFound Is Nothing Then TickerRow = TickerFound.Row MsgBox "找到目标行啦:" & TickerRow, vbInformation Else MsgBox "抱歉,没找到:" & TickerString, vbExclamation End If
内容的提问来源于stack exchange,提问作者dom176
相关产品推荐
相关产品推荐

