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

使用VBA运行SUMIF代码出现Object Error错误无法解决,求解决方案

错误核心原因

  1. 代码中未显式声明的Table1/Table2/Table3变量被自动识别为变体数组,而WorksheetFunction.SumIf的查找区域、求和区域参数要求传入Range对象,传入数组会直接触发对象类错误。
  2. SumIf的第二个参数要求是单个条件值,直接传入整列J区域作为条件不符合参数规则,无法直接批量返回整列结果赋值给K列。
  3. 原代码中LastRow = sh.Cells(Rows.Count, 1).End(xlUp).Row的Rows.Count未加工作表限定,当激活表不是SumIF表时会导致行数计算错误,进一步引发区域不匹配问题。

修正方案

方案1:写入公式后转值(效率最高,无需循环)

Sub SumIF()
    Dim LastRow As Long
    Dim sh As Worksheet

    Set sh = Sheets("SumIF")
    LastRow = sh.Cells(sh.Rows.Count, 1).End(xlUp).Row

    ' 写入SUMIF公式
    sh.Range("K2:K" & LastRow).FormulaR1C1 = "=SUMIF(C1,RC10,C2)"
    ' 可选:将公式转为数值,不需要保留公式可添加这行
    sh.Range("K2:K" & LastRow).Value = sh.Range("K2:K" & LastRow).Value
End Sub

方案2:逐行遍历计算(纯VBA逻辑不写入单元格公式)

Sub SumIF()
    Dim LastRow As Long
    Dim sh As Worksheet
    Dim i As Long
    Dim rngMatch As Range, rngSum As Range

    Set sh = Sheets("SumIF")
    LastRow = sh.Cells(sh.Rows.Count, 1).End(xlUp).Row
    Set rngMatch = sh.Range("A2:A" & LastRow)
    Set rngSum = sh.Range("B2:B" & LastRow)

    For i = 2 To LastRow
        sh.Cells(i, "K").Value = Application.WorksheetFunction.SumIf(rngMatch, sh.Cells(i, "J").Value, rngSum)
    Next i
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:36:02