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

VBA代码遇Error 13类型不匹配:无法将指定颜色单元格地址存入数组

错误分析与修复方案

核心错误原因

你把数组myArray声明成了Double(数值类型),但要存储的cell.Address是字符串类型,直接赋值必然触发Error 13(类型不匹配)。

修复后的完整代码

Sub SelectByColor()
    Dim cell As Range
    Dim rng As Range
    Dim LR As Long
    Dim myArray() As String, X As Long ' 将数组类型改为String以匹配单元格地址
    Dim mystr As String ' 显式声明变量,避免隐式变体类型
    
    X = 0
    ' 更可靠的B列最后一行获取方式
    LR = Cells(Rows.Count, "B").End(xlUp).Row
    
    Set rng = Range("B2:B" & LR)
    For Each cell In rng.Cells
        If cell.Interior.ColorIndex <> -4142 Then
            X = X + 1
            ReDim Preserve myArray(1 To X) ' 根据实际匹配数量动态扩展数组
            myArray(X) = cell.Address
            mystr = mystr & cell.Address & ","
        End If
    Next cell
    
    If Len(mystr) > 0 Then ' 避免无匹配单元格时Left函数报错
        mystr = Left(mystr, Len(mystr) - 1)
        MsgBox mystr
        MsgBox myArray(X) ' 此时X为数组最后一个元素的下标,不会越界
    Else
        MsgBox "未找到背景色非默认的单元格"
    End If
End Sub

额外优化说明

  • 修正数组类型:将Double改为String,完全匹配单元格地址的字符串类型
  • 规范变量声明:显式声明mystr,避免VBA自动创建变体类型变量
  • 优化最后一行获取:Cells(Rows.Count, "B").End(xlUp).Row不受历史单元格格式影响,结果更准确
  • 调整数组扩展逻辑:先递增计数再扩展数组,避免初始空数组的冗余操作
  • 增加容错判断:防止无匹配单元格时执行Left函数引发错误
  • 移除无效逻辑:删除未定义的N变量,原来的If X < N无实际意义

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 23:35:25