AI 如何把 Excel VBA 回款登记做成可验收工程

3 次浏览

AI 如何把 Excel VBA 回款登记做成可验收工程

企业的应收管理,难点往往不在“做一个窗体”,而在于让一次回款登记同时改变台账、流水和预警指标,并且经得住重复提交、超额回款、关闭重开等边界测试。本案例以四张 Excel 工作表为数据基础,用 VBA 构建“查询—校验—预览—确认—写回—刷新”的完整闭环,再用一组可重复执行的测试验证结果。

这不是一段只负责展示界面的宏,而是一套能够说明数据从哪里来、为什么能写、写完如何核对的轻量业务工程。

一、先把业务拆成四张表

工作簿没有额外数据库,所有状态都落在 Excel 中。为了避免界面代码直接到处读写单元格,先固定四张表的职责。

工作表 职责 关键数据
应收台账 保存每笔应收的当前状态 应收编号、客户、原始应收、累计回款、未收余额、到期日、状态
账龄规则 定义不同逾期天数对应的风险等级 起始天数、结束天数、风险标签
回款记录 追加式保存每次回款流水 回款编号、应收编号、日期、金额、方式、经办人、备注
预警看板 汇总管理指标 未收总额、逾期金额、逾期笔数、严重风险笔数

这种拆分有一个重要好处:窗体只是操作入口,业务规则集中在模块里,汇总结果由台账重新计算。以后即使调整窗体布局,也不必重写核心逻辑。

二、窗体不是“填完就写”,而是有状态的工作流

AI 如何把 Excel VBA 回款登记做成可验收工程

Excel VBA 回款登记窗体:查询、预览影响并确认登记

打开窗体后,用户先输入应收编号并查询。系统显示客户、账龄、当前余额等信息;随后填写回款金额、日期、方式和经办人。点击“预览影响”只计算登记后的余额和状态,不落盘。只有预览成功、再次确认后,才真正写入回款记录并刷新台账与看板。

语音或自然语言描述可以自动生成窗体;生成后的窗体可在 VBA 中手动编辑和微调。在 WorkBuddy 中直接沿用当前默认模型即可,不需要打开模型列表或重新选择模型。真正决定系统是否可靠的,仍然是字段映射、校验顺序、写回策略和验收用例。

这个窗体用一个布尔状态记录“当前输入是否已经预览”。只要用户修改关键输入,就清除该状态,强制重新预览。这样可以避免用户预览 18,000 元后又把金额改成 80,000 元,却直接沿用旧结果提交。

' 节选并简化:关键输入变化后,旧预览立即失效
Private Sub txtAmount_Change()
    m_已预览 = False
End Sub

Private Sub btn登记_Click()
    If Not m_已预览 Then
        MsgBox "请先预览本次回款影响。", vbExclamation
        Exit Sub
    End If
    ' 二次确认后再执行一次写入
End Sub

三、把所有拦截放在写入之前

登记函数最重要的原则是“先验证,后写入”。任何一项不成立,都应立刻退出,不能出现流水写了一半、台账还没更新的中间状态。

核心校验包括:

  • 回款编号不能为空且不能重复;
  • 应收编号必须真实存在;
  • 回款金额必须大于 0,且不得超过当前未收余额;
  • 回款方式、经办人和回款日期必须有效;
  • 预览时读取的应收记录,提交前仍需再次确认。
' 节选并简化:先返回失败原因,不触碰工作表
If Len(Trim$(回款编号)) = 0 Then
    失败原因 = "回款编号不能为空"
    Exit Function
End If

If 回款编号已存在(回款编号) Then
    失败原因 = "回款编号重复"
    Exit Function
End If

If 回款金额 <= 0 Or 回款金额 > 未收余额 Then
    失败原因 = "回款金额必须大于 0,且不得超过未收余额"
    Exit Function
End If

这里的“事务式”是工作表层面的工程策略:校验全部通过后,按固定顺序追加流水、刷新台账、重算看板并保存。它并不等同于数据库事务,但能显著减少 Excel 自动化中常见的半写入问题。

四、余额必须从事实数据推导

回款系统中很容易出现一个隐蔽错误:直接用“当前余额减本次金额”。如果当前余额曾被手工改错,后续每次扣减都会放大错误。本案例改为从原始应收额和累计回款额重新推导余额。

' 节选并简化:不递减旧余额,而是从事实数据重新计算
累计回款 = 汇总指定应收的全部回款(应收编号)
新余额 = Application.Max(0, 原始应收 - 累计回款)

If 新余额 = 0 Then
    状态 = "结清"
Else
    状态 = "未结清"
End If

预警看板也采用同样思路:每次写回后,从应收台账重新汇总未收总额、逾期金额、逾期笔数和严重风险笔数,而不是对旧指标做加减。数据量较小时,这种“重算换确定性”的策略更容易理解和验收。

五、用一条完整链路证明结果

本次验收选择应收编号 AR260805。登记前,该笔应收未收余额为 18,000 元;登记一笔 18,000 元全额回款后,流水新增、台账结清、看板同步变化。

AI 如何把 Excel VBA 回款登记做成可验收工程

登记完成后的预警看板:未收和逾期指标同步下降

指标 登记前 登记后 变化
未收总额 960,000 942,000 -18,000
逾期金额 742,000 724,000 -18,000
逾期笔数 17 16 -1
严重风险笔数 7 7 0

对应的回款流水编号为 RCPT26083101,日期为 2026-08-31,方式为银行转账,经办人为王磊。关闭并重新打开工作簿后,该笔应收仍显示“结清”,看板仍保持 942,000、724,000、16、7,说明结果已经持久化,而不是停留在窗体内存中。

六、边界测试比成功弹窗更重要

只看“登记成功”无法说明系统可靠。为此,测试模块先恢复演示数据,再连续执行五项断言。

测试场景 输入或条件 期望结果 实际结果
超额回款 余额 40,000,尝试登记 40,001 拒绝写入并提示原因 通过
正常全额回款 AR260805 登记 18,000 新增流水,余额归零 通过
台账状态 完成全额回款 状态更新为“结清” 通过
看板联动 完成全额回款 未收与逾期指标同步变化 通过
重复编号 再次使用 RCPT26083101 拒绝重复写入 通过

测试结果为 5 项通过、0 项失败。自动化测试不是为了替代人工检查,而是把最关键的业务约束变成可以重复执行的证据。以后新增字段或调整窗体时,只要再次运行测试,就能快速发现规则是否被破坏。

七、AI 最适合做什么,不能替你决定什么

在这个案例中,AI 很适合根据自然语言快速生成窗体骨架、字段映射、模块分层、校验分支和测试代码,也适合帮助定位控件命名不一致、数据列错位、旧余额递减等问题。

但以下内容必须由业务人员明确:

  • “逾期”按自然日还是工作日计算;
  • 全额回款后是否允许反向冲销;
  • 回款编号由系统生成还是引用财务系统单号;
  • 哪些字段允许人工修改,哪些必须锁定;
  • 看板口径是否包含争议款、坏账或未核销款。

更稳妥的协作方式,是把需求写成“字段 + 规则 + 写回顺序 + 验收结果”,而不是只说“帮我做一个回款窗体”。例如:

基于应收台账、账龄规则、回款记录和预警看板四张表,生成 Excel VBA 回款登记窗体。必须支持按应收编号查询、超额拦截、重复编号拦截、影响预览和二次确认;登记成功后追加回款流水,以原始应收减累计回款计算余额,刷新台账状态和看板。验收时证明 18,000 元全额回款使余额归零、状态结清、未收总额和逾期金额各下降 18,000,并通过关闭重开验证。

结语

Excel VBA 仍然适合解决数据规模可控、业务规则明确、用户主要在 Office 内工作的轻量流程。真正有价值的不是“AI 一次写出多少代码”,而是它能否帮助我们更快建立结构清晰、规则可解释、结果可复核的自动化工程。

从一个可编辑窗体开始,把校验前置、把余额改成推导、把看板改成重算、把边界条件写进测试,最终得到的才不只是演示,而是一套可以继续维护和扩展的业务工具。

AI 如何把 Excel VBA 回款登记做成可验收工程插图3

工具名称:VBAYYDS语音编程助手
适合人群:常用Excel且希望自动化操作但不想深学VBA的职场人
体验方式:下载地址vbayyds.com
✨ 让Excel听懂你的需求,或许只需要一次尝试。
✨ 你的时间,值得用在更值得的事情上。
官网下载地址 vbayyds.com
淘宝搜索 vbayyds
购买方式 加微信EXCEL880B
AI 如何把 Excel VBA 回款登记做成可验收工程插图4