
立即添加星标

每天学好教程
对于VBA开发者——尤其是靠Excel+Access+VBA吃饭的办公自动化、数据分析、财务建模人群——“AI编程”和“纯手搓”并不是非黑即白的选择,而是两种能力、两种节奏、两种风险偏好。”
一、纯手搓VBA:老派、可控、但慢
1. 完全掌控每一行代码
手写VBA时,你知道变量为什么叫rng,为什么用For Each而不是For i,为什么加上On Error GoTo。这种掌控感在调试复杂业务逻辑时至关重要——尤其是处理Excel单元格循环、数组批量操作、字典去重这些VBA经典场景。
2. 不会出现“AI幻觉”式错误
AI写的VBA代码可能看起来很完整,但它会用错WorksheetFunction、把Range和Cells混出逻辑漏洞,甚至编造一个不存在的Workbook.OpenEx方法。手搓代码至少不会凭空捏造API。
3. 深度理解VBA的古怪之处
VBA是一门“复古”语言:
数组下标默认从0或1取决于Option Base
Range.Value和Range.Value2区别微妙
Collection和Dictionary各有坑点
这些细节,AI不一定真懂,但手搓开发者被坑过一次就记住了。
4. 代码风格一致,易于长期维护
团队内部或自己维护多年的VBA项目,命名规范、错误处理模式、注释风格都需要统一。手搓能保证“人味”的一致,而不是每次生成的代码像不同实习生写的。
5.慢:写一个带模糊匹配的用户窗体、一个多条件筛选的数组算法,可能要半天。
6.知识孤岛:VBA生态相对封闭,手搓很难快速借鉴其他语言(Python、C#)的优秀模式。
7.容易疲劳:重复写Set ws = ThisWorkbook.Worksheets(“Sheet1”)这种样板代码,消耗热情。
二、AI辅助VBA编程:快、但有门槛
目前主流方式不是“让AI全自动开发”,而是Copilot式协作:ChatGPT、Copilot、通义灵码等生成VBA代码片段,开发者审阅、修改、集成。
1. 极大缩短“从0到1”的时间
例如:
“写一个VBA函数,合并当前工作簿下所有工作表的A:D列,去重后放到新表。”
手搓15–30分钟,AI 15秒生成骨架代码,你只需修正边界条件(如标题行处理、空表跳过)。
2. 降低陌生技术栈的接入成本
VBA开发者不常写正则、不常用JSON解析、不熟Windows API调用。AI可以直接给出:
用CreateObject(“VBScript.RegExp”)做正则匹配
解析HTTP请求返回的JSON(引入ScriptControl或调用MSXML2)
调用Shell执行外部程序
AI帮你跨过“我连函数名都不知道”的黑暗时刻。
3. 自动生成注释和错误处理
好的AI提示能要求它:加上Option Explicit、添加错误跳转、按匈牙利命名法写变量名。至少,它不会比新手写得更差。
4. 辅助重构和解释遗留代码
接手一个20年前的VBA项目,看到ActiveCell.Offset(1,0).Select满屏飞,让AI解释并改写为直接Range操作,是真实可用的能力。
5. VBA不是AI的优先优化语言
大模型训练数据里,Python、JS、Java的占比远高于VBA。AI经常会给出:
运行时效率极低的单元格循环(不懂VBA里数组+批量赋值的精髓)
混淆.Text和.Value
错误使用Select和Activate,让代码又慢又脆
6. 容易生成“看起来对,实际错”的代码
AI写的VBA很可能编译通过,但:
内存泄露(对象未置Nothing)
事件循环触发
区域计算未关闭ScreenUpdating和Calculation
这些问题如果不仔细审查,上线后Excel直接卡死或算错数,比编译错误更可怕。
7. 你不会真正内化知识
长期依赖AI写VBA,会导致:
离开AI后手写能力退化
遇到复杂逻辑(递归遍历文件夹、自定义类模块)无法独立设计
8. 安全和合规风险
财务、审计、医疗行业的VBA宏本身就很敏感。把公司业务逻辑贴给AI训练,或直接运行AI生成的未经审计的代码,可能引发数据泄露或流程事故。
三、VBA开发者视角

四、给VBA开发者的三条务实建议
1. 不要“完全手搓”,也不要“无脑AI”
复杂算法、核心财务逻辑 → 手搓为主,AI辅助检查边界条件。
界面代码、数据清洗、临时分析脚本 → AI生成 + 人工改造。
2. 把AI当成“会写VBA但不太靠谱的实习生”
你必须做到:
能看出AI代码里Select多余
能手动改成Range直接赋值
知道什么时候加DoEvents和Application.Volatile
3. 建立自己的VBA代码安全审查清单
AI生成的代码合入前,强制检查:
有无关闭ScreenUpdating/EnableEvents/Calculation
对象是否释放(尤其是CreateObject的外部组件)
是否依赖ActiveSheet/Selection
错误处理是否覆盖文件打开、工作表缺失等场景
对于VBA开发者来说,“手搓”不是情怀,而是底牌;“AI”不是威胁,而是杠杆。
VBA这个生态特殊在:它的用户大多是业务专家(财务、运营、数据分析师),而非全职程序员。对他们而言,AI编程的最大价值不是写出完美代码,而是降低从“我有需求”到“跑出结果”之间的摩擦。
但如果你彻底放弃手搓,你也就放弃了理解VBA运行机制的能力——而这是你在AI出错时,唯一能救火的东西。
最好的VBA开发者,不是“AI派”或“手搓派”,而是手搓过足够多的坑,又懂得让AI去填坑的那类人。
VBA工具合集,复杂工作一键搞定,让同事目瞪口呆的Excel自动化



识别二维码
关注视频号
Excel
加油站





长按
关注
立即添加星标

每天学好教程
夜雨聆风