运行VBA宏无故触发运行时错误'13',求错误排查及解决方法
VBA运行时错误'13'修复方案
核心错误原因
运行时错误'13'为类型不匹配,你的代码存在以下几处触发该错误的问题:
- 变量声明不规范:未开启强制变量声明,
Sa、P、O、N均未显式声明,冗余声明的A变量全程未使用,提升了类型不匹配风险 - 最后行计算逻辑错误:
LastRow = Cells(Rows.Count, "Q").End(xlUp).Row未指定所属工作表,默认读取当前激活工作表的Q列最后一行,若当前激活表不是Sales Output,会导致读取范围错误,读到非数值单元格时就会触发类型错误 - 无容错校验:未对单元格是否为错误值、是否为数值做判断,Q/P/N列任意单元格存在#N/A、#VALUE!等错误值,或是填入了非数值文本,直接读取值做对比、运算就会触发错误'13'
- 工作表引用不规范:混用
ThisWorkbook.Worksheets和Sheets,Sheets包含图表、宏表等非工作表对象,存在匹配错误风险
修复后完整代码
先将Option Explicit放在模块最顶部开启强制变量声明,再替换原有宏代码即可:
Sub HighlightAndHalve() ' 筛选关注人数大于3的商品,减半对应减免金额并标红,计算新售价 Dim cell As Range, rng As Range, LastRow As Long Dim wsOut As Worksheet, P As Range, O As Range, N As Range ' 统一绑定目标工作表,避免引用混乱 Set wsOut = ThisWorkbook.Worksheets("Sales Output") ' 明确从Sales Output表读取Q列最后一行,不受当前激活表影响 LastRow = wsOut.Cells(wsOut.Rows.Count, "Q").End(xlUp).Row Set rng = wsOut.Range("Q6:Q" & LastRow) For Each cell In rng ' 先校验Q列值无错误、为数值再做比较 If Not IsError(cell.Value) And IsNumeric(cell.Value) Then If cell.Value > 3 Then Set P = cell.Offset(0, -1) Set O = cell.Offset(0, -2) Set N = cell.Offset(0, -3) ' 额外校验P、N列值合法再执行运算 If Not IsError(P.Value) And IsNumeric(P.Value) And _ Not IsError(N.Value) And IsNumeric(N.Value) Then P.Value = P.Value / 2 P.Interior.ColorIndex = 3 O.Value = N.Value + P.Value End If End If End If Next cell End Sub
内容的提问来源于stack exchange,提问作者Lysander2001
相关产品推荐
相关产品推荐

