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
相关产品推荐
相关产品推荐

