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

Excel交易表格计算期末结余Macro编写及现有报错问题咨询

Excel 交易结余计算宏修复指导

相关表格示意图

原有代码报错原因

  • 工作表名称拼写不一致:一处引用Sheets("Bank Sheet")(带空格),另一处引用Sheets("BankSheet")(无空格),触发对象找不到报错
  • 语法错误:End If和End With没有换行分隔,VBA无法识别
  • 公式逻辑错误:R1C1偏移引用和结构化表引用混用,固定偏移R[-3]C会导致新增行后结余计算错位
  • 业务逻辑错误:流入、流出金额都赋值为同一个输入框的值,不符合交易记账规则
  • 删除宏逻辑缺陷:现有代码只要行数大于2就清空所有数据行,不符合常规删除单条记录的需求,也没有异常捕获机制

修正后完整代码

新增交易行+自动计算结余宏

Private Sub cmdAdd_Click()
    Dim oNewRow As ListRow
    Dim ws As Worksheet
    ' 统一引用工作表,避免拼写错误
    Set ws = Sheets("Bank Sheet")
    ' 直接引用结构化表对象
    Set oNewRow = ws.ListObjects("Table2").ListRows.Add(AlwaysInsert:=True)
    
    With oNewRow
        ' 请根据你的表单实际控件名称调整流入、流出对应的输入框名
        .Range.Cells(1, 5) = TxtBoxBkIn.Value ' 流入金额输入框
        .Range.Cells(1, 6) = TxtBoxBkOut.Value ' 流出金额输入框
        
        ' 计算结余:第一行数据直接算差额,后续行用上一行结余累加
        If .Index = 1 Then
            ' 如果有固定期初结余,可修改为=期初结余单元格+[@[Amount In]]-[@[Amount Out]]
            .Range.Cells(1, 7).Formula = "=[@[Amount In]]-[@[Amount Out]]"
        Else
            .Range.Cells(1, 7).Formula = "=OFFSET([@Balance],-1,0)+[@[Amount In]]-[@[Amount Out]]"
        End If
    End With
End Sub

删除最后一行交易宏

Sub DeleteLastTransaction()
    Dim ws As Worksheet
    Dim Table As ListObject
    Set ws = Sheets("Bank Sheet")
    Set Table = ws.ListObjects("Table2")
    
    ' 仅保留至少2行数据,避免清空表头和初始行
    If Table.ListRows.Count > 2 Then
        ' 删除最后一行,如需删除选中行可修改为对应行号
        Table.ListRows(Table.ListRows.Count).Delete
    End If
End Sub

补充说明

  • 可根据表单实际控件名称、期初结余所在位置调整对应代码参数
  • 建议开启VBA编辑器的「自动语法检查」功能,可提前识别拼写、换行类低级语法错误

内容的提问来源于stack exchange,提问作者Joachim Malipo Kahindo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:27:04