从0学Excel VBA编程 第4篇:Sub过程和MsgBox——让代码会说话
每天10分钟,让你的代码能弹窗、能提示、能"开口"和用户交流。
学习目标
完整理解 Sub过程的结构:Sub开头、End Sub结尾学会用 MsgBox在屏幕上弹出各种提示框掌握代码注释的写法,让代码自己"会说话"
知识点精讲
什么是 Sub 过程?
Sub 过程就是一段可以独立运行的 VBA 代码,是 VBA 程序最基本的组成单位。
你之前录制的宏、写过的清空表格代码,全部都是 Sub 过程。它就像一篇文章,一段代码就是一个完整的"段落",告诉 Excel "请你按我写的步骤去做"。
一个 Sub 过程的标准结构是这样的:
【SVG 示意图】
Sub 过程的命名规则
必须以字母或汉字开头,不能以数字开头 不能有空格、连字符 -、点号.等特殊符号不要用 VBA 保留字(比如 Sub、End)多个词可以用驼峰命名法,例如 CalculateSalary
MsgBox 函数:让代码"说话"的最简方式
MsgBox 用来在屏幕上弹出一个带文字的小窗口,是 VBA 里最常用的"和用户对话"方式。
最简单的写法:
MsgBox "你好,欢迎使用 VBA!"运行后,会弹出一个只显示"你好"的小窗口,点"确定"就关闭。
给 MsgBox 加按钮和图标
MsgBox 还可以加上各种按钮和图标,让弹窗更友好:
MsgBox "文件已保存", vbInformation, "提示"vbInformation:显示一个"i"信息图标vbExclamation:显示一个黄色感叹号vbQuestion:显示一个问号vbCritical:显示一个红色叉号
后面那个 "提示" 是弹窗的标题。
常用的按钮组合:
vbOKOnly | |
vbYesNo | |
vbYesNoCancel |
给代码写注释
注释是给自己和别人看的"代码说明",VBA 运行时不会执行。
注释有 3 种写法:
' 单引号开头,本行后面都是注释Rem 用 Rem 也可以写注释(不常用)' 还可以写在代码后面:Dim 数量 As Integer ' 声明一个整数变量写注释的 3 个好习惯:
在每个 Sub 过程开头写一行说明:这段代码做什么 复杂逻辑前加一行注释:为什么这样写 不要给"= Dim`"这种基础语法加注释,那是浪费时间
实战案例
案例1:最简单的弹窗问候(简单)
功能说明:写一个 Sub 过程,弹出一个欢迎弹窗。
操作步骤:
按 Alt + F11打开 VBA 编辑器点击"插入" → "模块" 在右侧代码窗口粘贴以下代码:
' =================================' 案例1:最简单的弹窗问候' =================================Sub 第一个弹窗() MsgBox "你好!这是你的第一个 VBA 弹窗。"End Sub把光标放在代码里任意位置,按 F5运行
结果:弹出一个只显示文字的小窗口,点"确定"关闭。
代码讲解:
' =====这一行是注释,不会被执行Sub 第一个弹窗():定义一个叫"第一个弹窗"的过程MsgBox "...":在屏幕上显示文字End Sub:过程结束
案例2:带图标和标题的提示弹窗(中等)
功能说明:把商品信息整理到一个字符串里,再用带"i"图标的弹窗显示出来,标题写"商品库存提醒"。
操作步骤:
在 VBA 编辑器中已有的模块下方,继续粘贴以下代码:
' =================================' 案例2:商品库存提醒' =================================Sub 显示商品库存() Dim 商品名 As String Dim 库存数量 As Integer Dim 提示信息 As String 商品名 = "无线键盘" 库存数量 = 5 提示信息 = "商品名称:" & 商品名 & vbCrLf & _ "当前库存:" & 库存数量 & " 件" & vbCrLf & _ "请及时补货!" MsgBox 提示信息, vbExclamation, "库存预警"End Sub按 F5运行
结果:弹出一个带黄色感叹号图标、标题为"库存预警"的窗口,显示三行文字。
代码讲解:
vbCrLf是换行符,让文字在弹窗里换行vbExclamation给弹窗加上黄色感叹号图标"库存预警"是弹窗的标题栏文字把要显示的内容先拼到变量里,弹窗那行就更简洁易读
案例3:实用小案例——判断用户选择并反馈(实用)
功能说明:模拟一个"删除前确认"的场景:弹窗让用户选"是"或"否",根据选择给出不同提示。
操作步骤:
在同一个模块下方继续粘贴以下代码:
' =================================' 案例3:删除前确认' =================================Sub 删除前确认() Dim 用户选择 As Long Dim 提示文本 As String 提示文本 = "你确定要删除 A1:D10 的所有数据吗?" & vbCrLf & _ "删除后将无法恢复!" 用户选择 = MsgBox(提示文本, vbYesNo + vbExclamation, "删除确认") If 用户选择 = vbYes Then ' 用户选了"是",执行删除 Range("A1:D10").ClearContents MsgBox "数据已删除!", vbInformation, "完成" Else ' 用户选了"否",取消操作 MsgBox "已取消删除,数据完好。", vbInformation, "提示" End IfEnd Sub按 F5运行
结果:先弹出"删除确认"窗口,根据用户点击的按钮,显示不同的提示消息。如果点"是",A1:D10 的内容会被清空。
代码讲解:
MsgBox(...)加上括号后,可以"返回"用户点击了哪个按钮vbYesNo+vbExclamation:用+把"是/否按钮"和"感叹号图标"组合起来用户选择 = vbYes(点"是")或vbNo(点"否")If...Then...Else...End If是判断语句,意思是"如果...就...否则就..."。今天先认识它,第 7 篇会详细讲Range("A1:D10").ClearContents:清空 A1 到 D10 区域的内容
本篇小结
Sub 过程是 VBA 的基本执行单元,必须以 Sub开头、End Sub结尾MsgBox 用来弹窗显示文字,最简写法是 MsgBox "文字"MsgBox 可以加 图标( vbInformation等)和 按钮(vbYesNo等)注释用单引号 '开头,是给"人看"的说明,VBA 不会执行
今天只需要记住三句话:
一个完整的 Sub 过程 = Sub 名字()+ 步骤 +End SubMsgBox "内容"就能弹窗'单引号开头就是注释
下一篇内容预告
第5篇:Range对象基础操作——选中单元格和区域
认识 Range对象和Cells对象的区别学会选中单个单元格、连续区域、不连续区域 学会获取当前选区的行号、列号、地址 下一篇开始,你将真正"指挥" Excel 操作指定区域!
小贴士:给每个 Sub 过程都起一个"见名知意"的中文名,比如
删除前确认比Test1好用得多。三个月后回来翻代码,你依然能一眼看懂。
夜雨聆风