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

咨询:无需手动触发自动运行VBA代码及跨表求和报错问题

问题分析与解决方案

原代码的核心问题

  1. Worksheet_Change事件格式错误:这个事件必须带ByVal Target As Range参数,缺省参数会直接触发报错。
  2. 无限循环风险:代码修改单元格B3时,会再次触发Worksheet_Change事件,导致循环调用崩溃。
  3. 未指定工作表范围:Range("b3")未明确所属工作表,可能会把结果写入当前激活的工作表,而非目标表。

修正后的代码

将以下代码放到你要显示求和结果的工作表模块中(右键目标工作表标签→查看代码,粘贴代码):

Private Sub Worksheet_Change(ByVal Target As Range)
    ' 关闭事件触发,避免循环调用
    Application.EnableEvents = False
    
    Dim sumrange As Range
    Dim Sumcolumn As Double
    
    On Error Resume Next ' 捕获表格/列不存在的错误
    Set sumrange = Sheets("Receipt Input").Range("TBL_receipts[Payments]")
    If Err.Number = 0 Then
        Sumcolumn = Application.WorksheetFunction.Sum(sumrange)
        ' 明确指定当前工作表的B3,避免写入错误位置
        Me.Range("b3").Value = Sumcolumn
    End If
    On Error GoTo 0 ' 恢复默认错误捕获
    
    ' 重新开启事件触发
    Application.EnableEvents = True
End Sub

额外优化(可选)

如果希望打开文件时自动执行一次求和(确保打开就显示最新结果),可在同一模块中添加以下代码:

Private Sub Worksheet_Activate()
    ' 复用Change事件的逻辑,避免重复编写代码
    Call Worksheet_Change(Me.Range("A1"))
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 00:22:05