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

Excel VBA中使用单元格引用调用SUM函数报错问题求助

Excel VBA中使用单元格引用调用SUM函数报错问题求助

嘿,我一眼就瞅到你代码里的问题啦——这是VBA里超常见的工作表上下文不匹配坑!

咱们来拆解下出错的那行代码:

Range("AP3") = WorksheetFunction.Sum(Worksheets("Results").Range(Cells(3, AEPC), Cells(LR, AEPC)))

你以为Cells(3, AEPC)和Cells(LR, AEPC)是属于Results工作表的,但实际上没指定工作表的Cells会默认指向当前激活的工作表(也就是你代码里激活的Counts_Tables_Macro)。这就导致你试图让Results表的Range去引用另一张表的单元格,VBA当然会报错啦!

解决方案:给所有单元格对象加明确的工作表限定

你已经定义了Set desiredSheetName = ThisWorkbook.Worksheets("Results"),直接用这个变量来限定所有Cells就行:

修改关键行代码为:

' 方式1:直接用变量限定
Range("AP3") = WorksheetFunction.Sum(desiredSheetName.Range(desiredSheetName.Cells(3, AEPC), desiredSheetName.Cells(LR, AEPC)))

' 方式2:用With块简化代码(更推荐,可读性更高)
With desiredSheetName
    Range("AP3") = WorksheetFunction.Sum(.Range(.Cells(3, AEPC), .Cells(LR, AEPC)))
End With

额外优化建议

  1. 尽量别用Activate和Select操作——这俩是VBA错误的高发区,还会拖慢代码运行速度。比如你可以直接指定工作表来写入结果,不用先激活:
    ' 替换掉 ActiveWorkbook.Sheets("Counts_Tables_Macro").Activate
    ' 直接指定工作表写入
    ThisWorkbook.Worksheets("Counts_Tables_Macro").Range("AP3") = ...
    
  2. 可以加个调试输出,确认AEPC和LR的值是否符合预期:
    Debug.Print "AEPC列号:" & AEPC, "最后行数LR:" & LR
    
    运行后打开VBA的立即窗口(Ctrl+G)就能看到输出,帮你排查参数是否正确。

修改后的完整示例代码

Sub Functions()

    Dim desiredSheetName As Worksheet
    Dim NewName As Worksheet ' 注:这个变量你定义了但没使用,可根据需求清理或补全逻辑
    
    Set desiredSheetName = ThisWorkbook.Worksheets("Results")
    
    'Finding the corresponding AEP box in Results Tab
    AEPC = WorksheetFunction.Match("5YR", desiredSheetName.Rows(2), 0)
    
    'Finding the residential property Column in Results Tab
    PropNumC = WorksheetFunction.Match(ThisWorkbook.Worksheets("DATA IN").Range("D2"), desiredSheetName.Rows(2), 0)
    
    'Finding the 'Class' column in Results Tab ** Requires change if column name changes **
    ClassC = WorksheetFunction.Match("Class", desiredSheetName.Rows(2), 0)
    
    'Getting last row in Results Tab
    Dim LR As Long
    With desiredSheetName
        LR = .Range("B" & .Rows.Count).End(xlUp).Row
    End With
    
    '测试固定范围求和(保留你的测试代码)
    ThisWorkbook.Worksheets("Counts_Tables_Macro").Range("AP1") = Application.WorksheetFunction.Sum(Range("AA10:AA12"))
    ThisWorkbook.Worksheets("Counts_Tables_Macro").Range("AP2") = WorksheetFunction.Sum(desiredSheetName.Range("DU3:DU17079"))
    
    '修复后的动态范围求和
    With desiredSheetName
        ThisWorkbook.Worksheets("Counts_Tables_Macro").Range("AP3") = WorksheetFunction.Sum(.Range(.Cells(3, AEPC), .Cells(LR, AEPC)))
    End With

End Sub

备注:内容来源于stack exchange,提问作者Matthew Farnham

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.23 07:19:09