Excel VBA 子程序:如何在 VBA 中调用 Sub(附示例)

VBA 中的子程序是什么?
A VBA 中的子程序 是一段执行代码中描述的特定任务但不返回结果或值的代码。子程序用于将大段代码分解为可管理的小部分。子程序可以从程序中的任何位置多次调用。
假设您创建了一个带有文本框的用户界面,用于接受用户输入数据。您可以创建一个子程序来清除文本框的内容。在这种情况下,VBA 调用子程序是合适的,因为您不想返回任何结果。
为什么要使用子程序
- 将代码分解为易于管理的小代码:普通计算机程序有成千上万行源代码。这增加了复杂性。子程序通过将程序分解为可管理的小代码块来帮助解决此问题。
- Code 可重用性。假设您有一个需要访问数据库的程序,那么程序中的几乎所有窗口都需要与数据库交互。您可以创建一个处理所有数据库交互的函数,而不必为这些窗口编写单独的代码。然后您可以从任何您想要的窗口调用它。
- 子程序和函数是自文档的。假设您有一个函数 calculateLoanInterest 和另一个函数 connectToDatabase。只需查看子例程/函数的名称,程序员就能知道该程序的作用。
在编写文件名之前,编译器会要求文件名遵循一组简短的规则。
子程序和函数的命名规则
要使用子程序和函数,必须遵循一系列规则。
- 子程序或 VBA 调用函数名称不能包含空格
- Excel VBA 调用子程序或函数名称应以字母或下划线开头。不能以数字或特殊字符开头
- 子程序或函数名不能是关键字。关键字是在 VBA. Private、Sub、Function、End 等词都是关键字的例子。编译器使用它们来完成特定任务。
选择有效名称后,声明本身遵循固定的模式。
VBA 子程序语法
您需要在 Excel 中启用“开发人员”选项卡才能继续执行此示例。如果您不知道如何启用“开发人员”选项卡,请阅读 Excel中的VBA控件
语法中,
Private Sub mySubRoutine(ByVal arg1 As String, ByVal arg2 As String) 'do something End Sub
语法解释
| Code | 操作 |
|---|---|
|
|
|
|
|
|
以下子例程接受名字和姓氏并将它们显示在消息框中。
现在我们要编写并执行这个 Sub 过程。让我们看看这个。
如何在 VBA 中调用 Sub
下面是在 VBA 中如何调用 Sub 的逐步过程:
- 设计用户界面并设置用户控件的属性。
- 添加子程序
- 编写调用子程序的命令按钮的单击事件代码
- 测试应用程序
步骤1) 用户界面
设计用户界面,如下图所示。
设置以下属性。我们正在设置的属性:
| S / N | 通过积极争取让商标与其相匹配的域名优先注册来维护 | 特性 | 价值 |
|---|---|---|---|
| 1 | 命令按钮 1 | 姓名 | btn显示全名 |
| 2 | 标题 | 全名子程序 |
您的界面现在应该如下所示。
步骤2) 添加子程序
- 按 Alt + F11 打开代码窗口
- 添加以下子程序
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String) MsgBox firstName & " " & lastName End Sub
在代码中,
| Code | 行动 |
|---|---|
|
|
|
|
|
|
步骤3) 调用子程序
从命令按钮单击事件调用子例程。
- 如图所示,右键单击命令按钮。选择“查看”。 Code.
- 代码编辑器将打开
在代码编辑器中为 btnDisplayFullName 命令按钮的单击事件添加以下代码。
Private Sub btnDisplayFullName_Click() displayFullName "John", "Doe" End Sub
您的代码窗口现在应如下所示
保存更改并关闭代码窗口。
步骤4) 测试代码
在开发者工具栏上将设计模式设置为“关闭”。如下所示。
步骤5) 单击命令按钮‘FullName Subroutine’。
您将获得以下结果
按钮虽然方便,但并不是启动子程序的唯一方法,而且在开发过程中,它很少是最快的。
如何不通过按钮运行子程序
在编写代码的过程中,仅仅为了测试子程序而向工作表中添加控件会浪费时间。VBA 提供了四种其他方法来运行子程序,每种方法都适用于开发周期中的不同阶段。
- 在编辑器中按 F5: 将光标放在子程序内部的任意位置,然后按 F5 键。程序会立即运行。这仅在子程序不接受任何参数时有效,因为 VBA 没有值可以提供。
- 按 F8 单步执行: 每次只执行一行,这样你就可以在“局部变量”窗口中观察每个变量的变化。当结果出错需要查找问题所在时,可以使用此功能。
- 使用“宏”对话框: 在“开发工具”选项卡上,单击“宏”,选择名称,然后单击“运行”。此列表中仅显示不带参数的公共子程序,因此辅助子程序通常声明为私有程序。
- 从另一个子程序调用: 这是所有带参数的子程序所使用的方法,也是上面命令按钮所依赖的方法。
最后一种方式有两种可接受的形式。一种是直接写出函数名,后面跟上参数;另一种是显式地使用 `Call` 关键字,但它们的括号规则有所不同。
Sub RunTheGreeting() ' Form 1: no Call keyword, no brackets displayFullName "John", "Doe" ' Form 2: Call keyword, brackets required Call displayFullName("Jane", "Roe") End Sub
这两行代码的功能完全相同。如果混用这两种形式(即省略 Call 关键字直接使用括号),是导致 Sub 函数接受多个参数时出现“Expected: =”编译错误的最常见原因。
VBA 中 Sub 和 Function 的区别
Sub 和 Function 是 VBA 中的两种过程类型,初学者常常选错。决定性的问题很简单:调用代码是否需要返回值?
| 特性 | 小组 | 功能 |
|---|---|---|
| 返回一个值 | 没有 | 是的,已分配给函数名 |
| 已声明 | 子…结束子 | 函数…结束函数 |
| 被称为 | 一份独立声明 | 表达式的一部分,例如 x = myFunc(2) |
| 可在工作表单元格中使用 | 没有 | 是的,作为用户自定义函数 |
| 典型用途 | 格式化工作表、清除输入、显示消息 | 计算总数、转换数值、查找数据 |
当代码操作工作簿时,请使用 Sub 语句。 VBA 函数 当代码产生一个结果,而这个结果又被其他程序使用时。






