VBA中Find函数存在匹配值却返回Nothing的问题求助
问题根因
VBA的Range.Find方法的可选参数不会使用固定默认值,会继承上一次查找操作(含用户在Excel界面手动执行的查找操作)的参数配置,大概率是之前的查找开启了单元格格式匹配、部分匹配/全字匹配规则不一致、区分大小写等配置,导致匹配失败返回Nothing,后续访问Nothing的属性就会触发Error 91。
解决方案
- 调用
Find时必须显式指定所有核心匹配参数,避免继承历史配置 - 拿到返回结果后先判断是否为
Nothing,再访问属性或执行后续操作
修正后代码示例
Debug.Print list(22) = name ' 输出为True,确认匹配值存在 Dim result As Range ' 显式指定所有关键匹配参数,根据实际需求调整参数值 Set result = list.Find( _ What:=name, _ LookIn:=xlValues, _ ' 匹配单元格的值而非公式 LookAt:=xlWhole, _ ' 全单元格内容完全匹配,需要部分匹配可改为xlPart MatchCase:=False, _ ' 不区分大小写 MatchByte:=False, _ ' 不区分全角半角 SearchFormat:=False _ ' 不匹配单元格格式 ) ' 先判断查找结果是否存在,避免91错误 If Not result Is Nothing Then Debug.Print result.Address Debug.Print result.Value Else Debug.Print "未找到匹配值" End If
特殊场景补充(针对含特殊字符的匹配)
如果查找的字符串中包含*、?、~等通配符字符,需要在对应字符前加~进行转义,否则会被识别为通配符规则导致匹配失败。你已经确认双引号统一使用Chr(34),无需额外转义。
内容的提问来源于stack exchange,提问作者federomano
相关产品推荐
相关产品推荐

