You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用VBA为表格数组不同重复值标色时出现Error 91如何解决

Error 91报错原因及替代实现方案

报错原因

  • Find参数继承问题:VBA的Find函数不会自动重置查找参数,会继承上一次调用(含手动在Excel界面使用查找功能)的LookIn、LookAt等参数设置。如果原代码未显式指定完整参数,比如默认查找范围是公式而非单元格值,就会匹配失败返回Nothing。
  • 公式返回错误值:如果单元格的公式输出为#N/A、#DIV/0!等错误值,Find查找有效值时无法匹配到对应内容,也会返回Nothing。
  • 匹配规则不匹配:比如公式返回的内容存在不可见特殊字符、数据类型不匹配(数值/字符串格式不一致),会导致Find无法命中对应值。

原代码修复方案

在调用Find时显式指定所有查找参数,同时增加返回值非空判断,避免直接操作Nothing对象触发报错:

Set 查找结果 = 目标范围.Find(What:=查找值, _
    LookIn:=xlValues, _
    LookAt:=xlWhole, _
    SearchOrder:=xlByRows, _
    SearchDirection:=xlNext, _
    MatchCase:=False, _
    MatchByte:=False)
If Not 查找结果 Is Nothing Then
    ' 原有后续操作逻辑
End If

替代实现方案(更稳定,适配公式生成值场景)

可以使用字典记录不同值对应的颜色,遍历范围直接标注,完全规避Find函数的不稳定问题,代码如下:

Sub 不同重复值标注不同颜色()
    Dim 处理范围 As Range, 单元格 As Range
    Dim 颜色字典 As Object
    Dim 当前值 As Variant
    Dim 颜色序号 As Integer
    
    ' 请修改为实际需要处理的工作表和单元格范围
    Set 处理范围 = ThisWorkbook.Sheets("替换为你的工作表名").Range("A1:A100")
    Set 颜色字典 = CreateObject("Scripting.Dictionary")
    颜色序号 = 3 ' 从颜色索引3开始,跳过黑白两色
    
    Application.ScreenUpdating = False ' 关闭屏幕更新提升运行速度
    
    For Each 单元格 In 处理范围
        ' 自动跳过空单元格和公式返回错误值的单元格
        If Not IsEmpty(单元格.Value) And Not IsError(单元格.Value) Then
            当前值 = 单元格.Value
            ' 新出现的值分配新颜色
            If Not 颜色字典.Exists(当前值) Then
                If 颜色序号 > 56 Then 颜色序号 = 3 ' 颜色索引超过上限就循环
                颜色字典.Add 当前值, 颜色序号
                颜色序号 = 颜色序号 + 1
            End If
            ' 标注单元格背景色
            单元格.Interior.ColorIndex = 颜色字典(当前值)
        End If
    Next 单元格
    
    Application.ScreenUpdating = True
    Set 颜色字典 = Nothing
    Set 处理范围 = Nothing
End Sub

内容的提问来源于stack exchange,提问作者Ratiasu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 14:24:04