
案例 VBA 0070 活动报名查重与签到登记窗体
在活动现场,签到并不是把“未签到”改成“已签到”这么简单。每次操作还要核对活动场次、报名编号、报名状态和报名人数,并把结果同步到不同工作表。只要漏掉一个判断,就可能出现串场、取消后仍签到、超员或重复登记。
这次不手动画窗体,也不逐行敲代码。我们把业务规则说给 WorkBuddy,VBAYYDS 负责把要求落成真正的 UserForm 和 VBA 代码,再通过命令运行并验证结果。最终得到一个能查重、能预览、能写回、能回滚的签到工具。
会描述业务,就能让 Excel 开始工作
这个案例解决什么问题
传统签到表的难点不在录入,而在规则之间相互牵连。报名编号可能属于另一个场次,报名状态可能已经取消,实到人数不能超过报名人数,同一个编号也不能登记两次。人工来回翻表核对,速度慢,忙起来更容易漏。
自动化窗体把这些判断放在操作之前。工作人员先加载报名,再预览状态变化,确认无误后一次写回。每一步都有明确反馈,数据也能留下可追踪的签到记录。
| 人工操作难点 | 窗体自动完成 |
|---|---|
| 编号相近容易看错人员或场次 | 按活动场次和报名编号精确定位 |
| 取消报名仍可能被误登记 | 读取报名状态并立即停止操作 |
| 实到人数可能超过报名人数 | 预览前校验正整数和人数上限 |
| 报名表与签到表容易漏改一处 | 新增签到记录并同步更新报名名单 |
| 写到一半出错会留下半套数据 | 任一步失败自动恢复原数据 |
WorkBuddy 和 VBAYYDS 如何配合
| 工具 | 在本案例中的作用 |
|---|---|
| WorkBuddy | 理解自然语言目标,读取工作簿和业务参数,组织生成与验证流程 |
| VBAYYDS | 连接当前 VBA 工程,生成真实窗体与代码,并用命令运行宏 |
| Excel 工作簿 | 保存报名名单、业务参数与签到记录,承接最终业务结果 |
两者的配合重点不是“帮你写一段示例”,而是把需求直接做进当前工作簿。窗体、控件、事件、校验、写回和测试都围绕真实数据展开。
用一句话描述完整目标
先在 VBA 编辑器中打开 VBAYYDS 菜单,让 WorkBuddy 能识别当前工程。随后把窗体主题、字段、按钮、业务规则和固定演示数据一次说清楚。描述越接近真实工作流程,生成结果越容易直接使用。

打开 VBAYYDS 菜单并连接当前 VBA 工程
这次的核心指令是:读取当前项目的 VBA、窗体技能、当前工作簿与业务参数表,生成活动报名查重与签到登记窗体。输入区包含活动场次、报名编号、签到时间、实到人数和签到方式;结果区显示报名信息与写回前后状态;同时补齐查重、取消、超员、重复签到拦截、事务写回和重开回读。

在 WorkBuddy 中用自然语言描述完整的签到业务
自动生成窗体和 VBA 代码
WorkBuddy 把需求拆成可执行任务,VBAYYDS 同步生成 UserForm 与完整事件代码。窗体采用明亮的 aqua tiffany 主题,录入区、只读预览区、消息区和操作按钮分区清楚,现场操作时不需要在工作表中来回找列。

真实 UserForm 与自动生成的 VBA 代码同步出现
| 区域 | 字段或控件 | 数据来源与作用 |
|---|---|---|
| 签到录入 | 活动场次 报名编号 签到时间 实到人数 签到方式 | 工作人员输入 |
| 报名预览 | 姓名 手机尾号 报名人数 报名状态 | 从报名名单读取 |
| 状态对比 | 签到前后 实到前后 待签到前后 | 预览计算并显示写回结果 |
| 追踪信息 | 记录编号 消息提示 | 自动编号并反馈当前步骤 |
| 操作按钮 | 加载报名 预览签到 确认写回 清空 关闭 | 把完整流程收进窗体 |
生成代码中的关键规则
窗体好看只是第一步,真正决定它能不能用的是业务代码。下面是本案例生成代码的核心节选。
加载报名时先查重
加载按钮先按报名编号定位行,再核对活动场次、报名状态和签到状态。任何一项不符合就立即返回,不让错误数据进入预览和写回阶段。
报名行 = 查找报名行(ws报名, 编号)
If 报名行 = 0 Then
设置消息 "未找到报名编号:" & 编号 & ",请确认输入。"
Exit Function
End If
If 实际场次 <> 场次 Then Exit Function
If 报名状态 = "已取消" Then Exit Function
If 签到状态 = "已签到" Then Exit Function
预览阶段校验人数与方式
预览不是摆设。代码会检查日期格式、实到人数、签到方式,并再次扫描签到记录。只有全部通过,确认写回按钮才会启用。
If CLng(Val(实到文本)) > CLng(Val(Tb报名人数.Text)) Then
校验签到输入 = "实到人数超过报名人数,禁止签到。"
Exit Function
End If
For r = 5 To 最后行
If CStr(ws记录.Cells(r, 2).Value) = 编号 Then
校验签到输入 = "签到记录已存在该报名编号。"
Exit Function
End If
Next r
写回之前再次确认状态
预览与确认之间,工作表内容仍可能被其他操作改变。因此写回前会重新加载报名,防止刚刚还未签到的数据在此期间已经被登记。
If Not 加载报名到窗体(场次, 编号) Then
Btn确认写回.Enabled = False
Exit Sub
End If
If Tb报名状态.Text = "已取消" Or Tb签到状态_当前() = "已签到" Then
Btn确认写回.Enabled = False
Exit Sub
End If
双表事务写回
确认写回后,代码先生成形如 CK20260905-001 的记录编号,再把本次签到追加到“签到记录”,同时更新“报名名单”中的签到状态、实到人数和待签到人数。两张表保持同一业务结果。
ws记录.Cells(记录行, 1).Value = 记录编号
ws记录.Cells(记录行, 2).Value = 编号
ws记录.Cells(记录行, 3).Value = 场次
ws记录.Cells(记录行, 6).Value = CDate(签到时间)
ws记录.Cells(记录行, 7).Value = 实到
ws记录.Cells(记录行, 8).Value = 方式
ws记录.Cells(记录行, 9).Value = Tb签到前状态.Text
ws记录.Cells(记录行, 10).Value = Tb签到后状态.Text
ws报名.Cells(报名行, 7).Value = Tb签到后状态.Text
ws报名.Cells(报名行, 8).Value = 实到
ws报名.Cells(报名行, 11).Value = 待签到
为了避免只写成功一张表,代码在写入前保存关键旧值。只要中途出现错误,就恢复报名行和签到记录行,并把失败原因显示给用户。
写回失败:
Application.ScreenUpdating = True
ws报名.Cells(报名行, 7).Value = 旧报名单元格(2)
ws报名.Cells(报名行, 8).Value = 旧报名单元格(3)
ws报名.Cells(报名行, 11).Value = 旧报名单元格(4)
For k = 1 To 11
ws记录.Cells(旧记录行, k).Value = 旧记录区(k)
Next k
设置消息 "写回失败已回滚:" & Err.Description
这就是事务式写回的价值:成功时两张表一起更新,失败时两张表一起恢复,不给后续统计留下不完整数据。
一次签到的真实结果
演示使用活动场次 AI办公训练营A场 和报名编号 REG-011。窗体自动读取姓名沈珊、手机尾号 1011 和报名人数 2;输入签到时间 2026-09-05 09:18、实到人数 2、签到方式二维码后,先预览再确认写回。
| 演示项目 | 实际值 |
|---|---|
| 活动场次与报名编号 | AI办公训练营A场 REG-011 |
| 姓名与手机尾号 | 沈珊 1011 |
| 签到时间与方式 | 2026-09-05 09:18 二维码 |
| 实到人数与记录编号 | 2 CK20260905-001 |

窗体写回成功并在签到记录中新增一条数据
| 项目 | 写回前 | 写回后 |
|---|---|---|
| 签到状态 | 未签到 | 已签到 |
| 实到人数 | 0 | 2 |
| 待签到人数 | 2 | 0 |
| 签到记录 | 无 | 新增一条 |
异常场景必须拦住
一个业务窗体不能只演示成功路径。本案例还用真实宏逐项验证了错误场次、已取消、超员和重复签到等情况。所有宏均通过 VBAYYDS 命令运行,不依赖在 VBA 界面中手动点运行。
| 异常场景 | 自动处理 |
|---|---|
| 活动场次与报名记录不一致 | 提示正确场次并停止加载 |
| 报名状态为已取消 | 禁止进入预览与写回 |
| 当前状态已经是已签到 | 禁止重复登记 |
| 实到人数超过报名人数 | 给出人数上限并停止预览 |
| 签到记录中已有相同报名编号 | 再次查重形成双重防护 |
| 双表写回过程中发生错误 | 恢复原值并提示回滚原因 |

重新打开窗体后再次加载同一报名编号 重复签到被自动拦截
四步开始用嘴做 VBA
- 说清目标 把字段 操作顺序 写回位置和异常规则说明白
- 交给 WorkBuddy 让它读取当前工作簿并组织完整制作流程
- 连接 VBAYYDS 自动绘制 UserForm 并生成可运行的 VBA 代码
- 用 vbayyds cli 运行宏 对成功路径和异常路径逐项验证
真正节省时间的,不只是少敲几行代码,而是把字段、流程、校验、写回和测试一次变成可以运行的 Excel 自动化。对于规则明确的内部管理工具,WorkBuddy 加 VBAYYDS 能把“我想做一个窗体”快速推进到“这个窗体真的能工作”。
WorkBuddy 加 VBAYYDS 会说话就能做 VBA 自动化

最终生成的是完整可运行的 VBA 代码 不是静态模板

