5.2 VBA编程基础


5.2 VBA 编程基础

本节摘要:VBA 是 Office 全家通用的编程语言。本节面向零基础读者给出最小语法集——变量与类型、分支、循环、过程封装,并用一个华彩的真实小工具(订单号生成器)把语法点串成完整可抄的代码。

宏走到边界处(5.1 末尾那三个信号),就该写代码了。好消息有三个:VBA 出自 Basic 家族,关键字接近自然英语;它和 Excel 的 VBA 是同一门语言,学会了到处通用;Access 环境里你要操作的对象模型高度收敛,常用方法两只手数得过来。坏消息只有一个:第一次运行报错时的挫败感,人人平等。这一节按"环境 → 最小语法 → 完整实例 → 读错本领"的顺序推进。

一、先把工作台布置好

按下 Alt 加 F11 键打开 VBA 编辑器(简称 VBE),这是另一个独立窗口,左边工程资源管理器里能看到你库里的窗体报表,双击某个窗体进入它的代码页。三件初次配置建议一次做完:

VBE 初次配置清单 1 工具选项 要求变量声明 打勾 效果 每个模块顶部自动出现 Option Explicit 行 2 视图 立即窗口 呼出 这是你的草稿纸 单行代码当场执行看结果 3 认识 F8 键 单步执行 逐行走代码 是未来调试的主力键

第一条最重要:强制声明让拼错的变量名当场报错而不是静默新建一个空变量——VBA 老手与新手的一半差距就在这条习惯上。立即窗口的日常用法随手演示:输入 ? Date() 回车,立刻看到今天日期;问号是打印的意思。

二、最小语法集:四块积木

块一:变量与类型。 声明格式 Dim 数量 As Long。常用类型一张表记牢:

类型 装什么
Long 整数计数 数量、ID
Double / Currency 小数金额 合计额
String 文本 客户名称
Date 日期时间 截止日
Boolean 真假开关 是否审核
Variant 万能但少用 兜底

内存里的规则只有一条值得提前知道:类型错了不是编译错误而是运行时炸弹,Long 装不下小数、String 装不进日期都会当场翻脸——所以装箱环节要心里有数。

块二:分支。 两段式 If 和多岔口 Select Case:

If 库存数量 >= 本单需求 Then 可发货 = True Else MsgBox "库存不足 当前有 " & 库存数量 & " 件" End If Select Case 状态值 Case "待确认" 提示 = "等待主管确认" Case "已发货" 提示 = "运输中 请耐心" Case Else 提示 = "状态异常 请联系管理员" End Select

& 号负责字符串拼接,MsgBox 是弹窗函数——第一个常打交道的内置成员。

块三:循环。 两兄弟覆盖九成场景:

' For 已知次数 循环 Dim i As Long For i = 1 To 12 Debug.Print i & "月汇总处理" Next i ' Do While 满足条件才继续 适合边读边判断 Do While Not rst.EOF ' EOF 到达文件尾 则停 Debug.Print rst!货品名称 ' 感叹号取字段 一步到位 rst.MoveNext ' 移动到下一条 忘写就是死循环之最 Loop

第二段提前出现了 Recordset 的影子(下一节主角),这里只记住节奏:进入前 Open、逐条处理、每轮 MoveNext、结尾 Close。

块四:过程与函数。 把成段逻辑装进盒子里复用:

Sub 问好(姓名 As String) ' Sub 干活 不返回值 MsgBox "你好 " & 姓名 End Sub Function 下单月份(某日期 As Date) As Integer ' Function 返回值 下单月份 = Month(某日期) End Function ' 调用方 直接当命令用 或嵌进表达式 下单月份 #2026-08-15# ' 得 8

参数传进来、结果吐出去,盒子装好了主流程就清爽了。华彩后面所有模块都是这个套路的放大重演。

三、完整实战:业务单号生成器

来一段真实工位的完整代码。需求:录单时自动产生今日流水号 HD20260827001 格式——HD 前缀加八位年月日加三位当日序号,每天归零:

Public Function 生成单号() As String Dim 前缀 As String, 日序号 As Long Dim 最大旧号 As Variant On Error GoTo 错误兜底 ' 错误跳转到标签 是 VBA 标准护网 前缀 = "HD" & Format(Date, "yyyymmdd") ' 找今天已经最大的号 DMax 取最大值 一行顶一段遍历 最大旧号 = DMax("业务单号", "订单", "业务单号 Like '" & 前缀 & "*'") If IsNull(最大旧号) Then 日序号 = 1 ' 今天第一单 Else ' 从右侧截出三位转成数字加一 再格式化补足三位 日序号 = Val(Right(最大旧号, 3)) + 1 End If 生成单号 = 前缀 & Format(日序号, "000") Exit Function 错误兜底: 生成单号 = "" ' 返回空 上层就知道失败了 MsgBox "单号生成失败 原因 " & Err.Description End Function

这段不足二十行的函数浓缩了五个惯用法,划重点:

  • On Error GoTo 护网:出错时跳到自定义标签位置收场,永远不让裸奔的系统错误怼用户一脸;
  • DMax 秒杀遍历:最大值查询一行搞定,配 DMin、DCount、DLookup、DSum 组成 D 函数五虎;
  • Format 的表达力:日期变字串、数字补零都是一把梭;
  • IsNull 显式检查:没有历史数据时 DMax 返回 Null,直接拿 Null 做算术会原地爆炸;
  • Val 加 Right 的老派组合:截尾部序号的小技巧,可读性尚可且不需要正则。

图题:单号生成函数的数据流穿线

图题:单号生成函数的数据流穿线

四、读懂错误框的本领

最后练排错眼力。VBA 报错框给三样东西:编号、一句英文或机翻描述、按钮组。最常见的四位常客先认识:

错误急救卡 类型不匹配 13 类型表复习 装箱错位 未设置对象变量 91 少了一句 Set 打头的赋值 找不到项目 3078 表名或查询名敲错 先对照字典 参数不足 3061 SQL 字符串拼接丢了逗号或漏了字段名

两个调试动作比读十篇文档有用:一是按 F8 单步执行,看着变量悬窗里的值一步步变化,凶手自然现身;二是把可疑表达式粘进立即窗口加问号当场求值,比如 ? Left("abc", 2) 直接得 ab——立即窗口就是程序员的实体实验室。

顺手定一条团队风格

代码能跑之后,马上要立的是风格。我们的约定只有三条:过程名与变量名一律用业务词汇(生成单号、日序号),杜绝 a、tmp1 这类占位符;每个模块顶部统一保留 Option Explicit(强制声明的开关要靠它逐模块锁死);缩进用 VBE 自带的 Tab 且提交前跑一次"调试菜单里的编译"——编译通过说明没有拼写级低错,是零成本的体检。风格不是洁癖,是把"读代码的成本"压到最低的公共投资。

补一句给零基础者的宽心话:本章全部例子的语法量,抵不上任何一门主流语言的十分之一——变量、分支、循环、过程四件套在任何语言里都是同一套思想,区别只在拼法。真正的门槛从来不是语法而是开始写的第一晚:报错十次、修好第十一次的那个晚上过去后,你就是会写程序的人了。

本节收获盘点

  • 四块积木:类型化变量、If 与 Select 分支、For 与 Do 循环、Sub 与 Function 封装。
  • 强制声明必须开;立即窗口和 F8 是 Debug 双子星。
  • 实战模板里五件套——错误护网、D 函数、Format、Null 检查、老派字串截取——构成往后所有代码的地基。
  • 错误框不是嘲讽是线索,背下四个高频编号能救命。

语法在身,下一节进入 Access 编程的正主:用对象模型正式读写数据库。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U