乐于分享
好东西不私藏

从0学Excel VBA编程 第16篇:用户窗体——打造带按钮和输入框的小窗口

从0学Excel VBA编程 第16篇:用户窗体——打造带按钮和输入框的小窗口

从0学Excel VBA编程 第16篇:用户窗体——打造带按钮和输入框的小窗口

前面的15篇,我们写的代码几乎都在"摆弄单元格":读 A1、写 B2、批量改格式……可你有没有想过,要是让隔壁不写代码的同事来用你的工具,他得打开 VBA 编辑器、按 F5,这门槛也太高了。今天学的"用户窗体(UserForm)",能让你做一个弹出来的小窗口,同事只要在框里填字、点按钮,数据就乖乖进表格了——完全不用碰任何代码。

学习目标

  • 认识 UserForm(用户窗体)是什么,它能帮办公人员解决什么麻烦
  • 学会插入窗体、添加常用控件(标签、文本框、命令按钮)并设置属性
  • 学会用按钮的 Click 事件,把窗体里输入的数据写进工作表

知识点精讲

为什么要有"窗体"

到现在为止,我们运行程序要么按 F5、要么靠工作表事件自动触发。这对会 VBA 的人没问题,但工具最终是给普通同事用的。他们想要的是:弹出一个窗口 → 在框里填内容 → 点"保存",完事。

UserForm(用户窗体)就是 Excel 里自带的一个"画板",你在上面摆几个输入框和按钮,再让按钮去执行你写好的代码,一个零门槛的小工具就诞生了。

怎么插入一个窗体

  1. 按 Alt + F11 打开 VBA 编辑器;
  2. 菜单栏选「插入」→「用户窗体」;
  3. 中间会多出一块灰色画布(这就是窗体),右侧出现「工具箱」,里面有各种控件。

三个最常用控件

工具箱里控件很多,但 0 基础先记住这三个就够了:

  • 标签 Label:只显示一行提示文字,比如"姓名:",用户不能往里输入;
  • 文本框 TextBox:一块空白输入框,用户在这里打字;
  • 命令按钮 CommandButton:一个可以点的按钮,点击后执行你写的代码。

添加方法很简单:在工具箱里点一下某个控件,再到窗体上拖拽出一个大小即可。

两个必须知道的"属性"

每个控件都有一堆属性,写在左下角的「属性窗口」里。最常用的是这两个:

  • Caption(标题):控件上显示的字。标签和按钮都用它,比如把按钮的 Caption 改成"保存"。
  • Name(名称):控件在代码里的"身份证",默认叫 TextBox1、CommandButton1。代码要操作哪个控件,就喊它的 Name。

小提醒:Caption 是"给人看的字",Name 是"给代码用的名字",别搞混。初学阶段我们直接用默认 Name(TextBox1、CommandButton1),代码就能直接复制运行,不用改名。

事件:按钮被点了,会怎样

"事件"我们在第12篇学过——某个动作发生时,自动执行的代码。窗体里的按钮被点击,触发的就是 Click(点击)事件

操作方式:在窗体上双击那个按钮,VBA 会自动生成一段 CommandButton1_Click() 的空过程,你把点击后要执行的代码写进去就行。

显示与关闭窗体

  • 窗体代码写在窗体自己的代码页里(双击窗体或控件就能进入);
  • 想"弹出"这个窗口,要在标准模块里写一个 Sub,用 UserForm1.Show 把它显示出来;
  • 在窗体的按钮代码里,用 Unload Me 可以把当前窗口关掉(Me 指"我自己这个窗体")。

实战案例

案例 1:做一个"问候窗体"(简单)

功能说明:弹出一个小窗口,让用户输入名字,点"问候"按钮后,弹出一个欢迎消息框。纯窗体交互,不涉及表格,最适合第一次上手。

代码: 先在窗体里摆好:一个 Label(Caption 改为"请输入你的名字:")、一个 TextBox(默认名 TextBox1)、一个 CommandButton(Caption 改为"问候")。然后双击按钮,在窗体代码页写:

Private Sub CommandButton1_Click()    Dim 名字 As String    名字 = TextBox1.Text          ' 读取文本框里输入的内容    MsgBox "你好," & 名字 & "!欢迎学习 VBA!"End Sub

再在标准模块里写一个用来弹出窗体的 Sub:

Sub 显示问候窗体()    UserForm1.Show                ' 弹出名为 UserForm1 的窗体End Sub

操作步骤

  1. 按 Alt + F11 打开 VBA 编辑器,插入 → 用户窗体。
  2. 从工具箱拖出 Label、TextBox、CommandButton 各一个。
  3. 选中按钮,在属性窗口把 Caption 改成"问候";选中标签,把 Caption 改成"请输入你的名字:"。
  4. 双击按钮,粘贴上面的 CommandButton1_Click 代码。
  5. 插入一个标准模块,粘贴 显示问候窗体 这个 Sub。
  6. 运行 显示问候窗体,在弹出的窗口里输入名字、点"问候",就会看到欢迎消息框。

案例 2:做一个"姓名+部门"录入窗体(中等)

功能说明:窗体里有两个输入框(姓名、部门)和一个"保存到表格"按钮。点击后,把两项内容写进当前工作表的下一行,并自动关闭窗口。

代码: 窗体布局:Label1(Caption"姓名:")、TextBox1、Label2(Caption"部门:")、TextBox2、CommandButton1(Caption"保存到表格")。双击按钮,在窗体代码页写:

Private Sub CommandButton1_Click()    Dim 下一行 As Long    下一行 = Cells(Rows.Count, 1).End(xlUp).Row + 1   ' 找到 A 列最后一个有内容的下一行    Cells(下一行, 1).Value = TextBox1.Text            ' 姓名写进 A 列    Cells(下一行, 2).Value = TextBox2.Text            ' 部门写进 B 列    MsgBox "已保存:" & TextBox1.Text & "," & TextBox2.Text    Unload Me                                          ' 保存完关闭窗口End Sub

标准模块里照旧写显示窗体的 Sub:

Sub 显示录入窗体()    UserForm1.ShowEnd Sub

操作步骤

  1. 插入用户窗体,摆好两个标签、两个文本框、一个按钮,并设置好 Caption。
  2. 双击按钮,粘贴上面的 CommandButton1_Click 代码(注意控件名要和窗体里的一致,默认就是 TextBox1、TextBox2)。
  3. 在标准模块写 显示录入窗体 并运行,窗体弹出。
  4. 输入"张三""销售部",点"保存到表格",切回 Excel 会看到 A、B 列新增了一行;再打开窗体录下一个,会自动接在后面。

案例 3:员工信息录入(含校验和重置,实用小案例)

功能说明:做一个更像真实工具的录入窗体:三个输入框(姓名、部门、入职日期)、一个"保存"按钮、一个"重置"按钮。保存时先检查"姓名"不能为空;保存后清空输入框方便录下一位;重置按钮一键清空所有框。

代码: 窗体布局:Label1"姓名:"+TextBox1、Label2"部门:"+TextBox2、Label3"入职日期:"+TextBox3、CommandButton1(Caption"保存")、CommandButton2(Caption"重置")。双击按钮分别写:

Private Sub CommandButton1_Click()    If TextBox1.Text = "" Then          ' 校验:姓名不能为空        MsgBox "姓名不能为空,请先填写!"        TextBox1.SetFocus               ' 把光标移回姓名框        Exit Sub    End If    Dim 下一行 As Long    下一行 = Cells(Rows.Count, 1).End(xlUp).Row + 1    Cells(下一行, 1).Value = TextBox1.Text   ' 姓名    Cells(下一行, 2).Value = TextBox2.Text   ' 部门    Cells(下一行, 3).Value = TextBox3.Text   ' 入职日期    MsgBox "保存成功!已记录第 " & (下一行 - 1) & " 位员工。"    TextBox1.Text = ""                  ' 清空,方便录下一位    TextBox2.Text = ""    TextBox3.Text = ""    TextBox1.SetFocusEnd SubPrivate Sub CommandButton2_Click()    TextBox1.Text = ""                  ' 重置:清空所有输入框    TextBox2.Text = ""    TextBox3.Text = ""    TextBox1.SetFocusEnd Sub

标准模块里写显示窗体的 Sub(同上,把名字换成你窗体的名字即可):

Sub 打开员工录入()    UserForm1.ShowEnd Sub

操作步骤

  1. 插入用户窗体,按上面的布局摆好 3 个标签、3 个文本框、2 个按钮,并设置 Caption。
  2. 双击"保存"按钮,粘贴 CommandButton1_Click;双击"重置"按钮,粘贴 CommandButton2_Click
  3. 在标准模块写 打开员工录入 并运行。
  4. 不填姓名直接点"保存",会提示"姓名不能为空";填好后保存,数据进表格并自动清空,可连续录入;随时点"重置"也能清空所有框。

本篇小结

  • UserForm(用户窗体)是 Excel 自带的"画板",能让不会代码的人通过填框、点按钮来用你的工具。
  • 三个入门控件:Label(显示提示)、TextBox(输入内容)、CommandButton(点击执行)。
  • 控件的两大属性:Caption 是给人看的字,Name 是给代码用的名字(初学用默认名即可)。
  • 双击按钮生成 Click 事件过程;用 UserForm1.Show 弹出窗口,Unload Me 关闭窗口。
  • 把数据显示/保存的逻辑写在按钮的 Click 事件里,配合 Cells(...).Value 就能把窗体输入写进工作表。

下一篇内容预告

第 17 篇:综合案例 1——批量处理多个 Excel 文件

我们将把前面学的"工作簿打开/保存""循环""数组"串起来,写一个能自动打开一个文件夹里的所有 Excel、批量读取或汇总数据的小工具,让你体会 VBA 真正的"省时威力"。