看看VBA的Sub过程和Function过程
时间:2023-12-11 23:17:02
经过前面的一系列文章的示例学习,我们应该已经熟悉了Sub过程。通常我们看到的Sub过程的基本形式是:
Sub 过程名称()
[此处放置代码语句]
Exit Sub
End Sub
这也是我们在编写大多数VBA程序时用到的结构。其中:
过程名称为编程人员给过程命名的名称,其命名规则与变量名称的规则相同。在同一模块中的过程名称不能同名。
Sub和End Sub配套出现,它们之间构成一个完整的程序过程。
过程中的代码可以放置ExitSub语句,表示提前退出过程。
通常,在VBE编辑器中,写下sub和过程名称,按下回车键后,会自动添加End Sub语句。Sub过程用来执行操作,而Function过程可以返回值,创建自定义函数。Function过程的基本语法形式为:
Function 过程名称()
[此处放置代码语句]
[过程名称= 表达式或值]
[Exit Function]
[此处放置代码语句]
[过程名称= 表达式或值]
End Function
可以看出,其形式与Sub过程的基本形式相似,只是将关键词Sub换成了Function。注意:
在Function过程的代码语句中,应至少有一次把某个确定的值赋值给函数过程的名称。
建议避免使用Excel内置函数名称、单元格引用、单元格区域的名称作为函数过程的名称。
Function过程不能对单元格区域进行修改,不能执行与对象相关的操作。
Function过程可以应用在工作表公式中,就像Excel的内置函数一样;Function过程也可以应用在VBA代码中。
过程代码中可以放置ExitFunction语句,表示提前退出过程。
按惯例,方括号表示可选。
下面的示例代码统计当前可见工作簿的数量:
Function lWkbNum()
Dim lCount As Long ‘声明计数变量
Dim wkb As Workbook ‘声明工作簿对象变量
‘遍历应用程序中的工作簿
For Each wkb In Application.Workbooks
‘如果为可见工作簿则增加1
If wkb.Windows(1).Visible Then
lCount = lCount + 1
End If
Next wkb
‘将结果赋值给函数名
lWkbNum = lCount
End Function
就像运用Excel内置函数一样,在工作表中输入“=lWkbNum()”,显示当前已打开的可见工作簿的数量,如下图所示。
图:在单元格A1中输入=lwkbnum(),显示2,即当前打开的可见工作簿数为2个
下面的代码在Sub过程中调用自定义的lWkbNum函数:
Sub testlWkbNum()
MsgBox “当前可见工作簿的数量为:”& lWkbNum
End Sub
运行后显示如下图所示的消息框:
由于之前的一系列文章中都是使用的Sub过程作为的例子,所以本文详细介绍了Function过程的最基础知识,给您一个初步的认识。
不管是Sub过程还是Function过程,都可以带有参数,Function过程还可以设置返回值的类型,我们将在后续逐步深入这些知识。
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Win10英雄联盟图形设备初始化失败怎么办?
![](https://img.aspxhome.com/file/2023/1/a280652_0s.jpg)
Win10笔记本无线网络受限制如何解决?
![](https://img.aspxhome.com/file/2023/26/a224991_0s.jpg)
excel 如何最快核对两列数据的不同
![](https://img.aspxhome.com/file/2023/2/a161602_0s.jpg)
excel绘制一个半圆的饼图
![](https://img.aspxhome.com/file/2023/3/40983_0s.jpg)
雷电模拟器4开配置要求?雷电模拟器4开需要怎样的电脑配置
![](https://img.aspxhome.com/file/2023/7/a327577_0s.jpg)
Word如何全自动调整表格的宽度?
![](https://img.aspxhome.com/file/2023/3/23693_0s.jpg)
Win10设置管理员权限怎么获取?Win10设置管理员权限获取方法步骤
![](https://img.aspxhome.com/file/2023/1/50361_0s.png)
GhostWin7系统安装时出错提示a destination volum如何解决?
![](https://img.aspxhome.com/file/2023/28/a250655_0s.jpg)
右击图片打开方式多了个Microsoft WinRT Storage API怎么删除?
![](https://img.aspxhome.com/file/2023/25/a217367_0s.jpg)
ip地址有冲突怎么办 局域网ip冲突如何解决
Win11安装失败是什么原因?Win11安装失败应该如何解决?
![](https://img.aspxhome.com/file/2023/1/a283350_0s.png)
计算机中丢失api-ms-win-core-path-l1-1-0.dll怎么解决
![](https://img.aspxhome.com/file/2023/28/a239962_0s.jpg)
2019苹果Mac Pro发售在即
![](https://img.aspxhome.com/file/2023/9/a211499_0s.jpeg)
如何在HomePod上更改Siri语音和口音?
![](https://img.aspxhome.com/file/2023/9/a208069_0s.png)
如何利用PPT标尺调整项目编号文字?
![](https://img.aspxhome.com/file/2023/10/a352849_0s.jpg)
Windows Update提示错误代码80072efd怎么办?
![](https://img.aspxhome.com/file/2023/6/a325683_0s.jpg)
Win10电脑一键释放系统资源的操作方法?
![](https://img.aspxhome.com/file/2023/4/a306566_0s.jpg)
2个excel表格数据合并?excel表格关联数据合并的详细教程
![](https://img.aspxhome.com/file/2023/6/42116_0s.jpg)
如何调整word表格?
![](https://img.aspxhome.com/file/2023/7/34707_0s.gif)
AlDente: 限制 Macbook 最大充电量,保护电池健康的小工具
![](https://img.aspxhome.com/file/2023/4/a208184_0s.png)