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
相关产品推荐
相关产品推荐

