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

运行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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 13:45:03