Sub 和 Function 是VBA提供的两种封装体。
- 利用宏录制得到的就是Sub。
- Sub 定义时无需定义返回值类型,而 Function 一般需要用 “As 数据类型” 定义函数返回值类型。
- Sub 中没有对过程名赋值的语句,而 Function 中有对函数名赋值的语句,一般在函数最后返回值,格式如下:
Set functionName = xxxxxx
- 调用过程:调用 Sub 过程与 Function 过程不同。调用 Sub 过程的是一个独立的语句,而调用函数过程只是表达式的一部分。另外,自定义函数并不允许修改工作表和单元格格式 (A UDF will only return a value it won't allow you to change the properties of a cell/sheet/workbook. )。但是,与 Function 一样,Sub 也可以修改传递给它们的任何变量的值。
- 调用 Sub 过程有两种方法:以下两个语句都调用了名为 ProcExcel 的 Sub 过程。
Call ProcExcel (FirstArgument, SecondArgument)ProcExcel FirstArgument, SecondArgument
注意当使用 Call 语法时,参数必须在括号内。若省略 Call 关键字,则也必须省略参数两边的括号。
1.6.1 Sub 过程
[Private|Public] [Static] Sub 过程名([参数列表 [As 数据类型]]) [语句块]End Sub' [Private|Public]定义过程的作用范围' [Static]定义过程是否为静态' [参数列表]定义需要传入的参数
调用Sub的方法有三种,使用Call、直接调用和Application.Run
举个例子:
1.6.2 Function 函数
vba内部提供了大量的函数,也可以通过Function来定义函数,实现个性化的需求。
[Public|private] [Static] Function 函数名([参数列表 [As 数据类型]]) [As 数据类型] [语句块] [函数名=过程结果]End Function
使用函数完成上面的例子:
参数传递
参数传递的方式有两种,引用和传值。 传值,只是将数据的内容给到函数,不会对数据本身进行修改。 引用,将数据本身传给函数,在函数内部对数据的修改将同样的影响到数据本身的内容。
参数定义时,使用ByVal关键字定义传值,子过程中对参数的修改不会影响到原有变量的内容。 默认情况下,过程是按引用方式传递参数的。在这个过程中对参数的修改会影响到原有的变量。 也可以使用ByRef关键字显示的声明按引用传参。
Sub St1(ByVal n As Integer, ByRef range) ...Other codeEnd SUb
神器放送
VBA编程神器 VBA代码助手 可以极大提高编程速度,降低编程门槛欢迎使用
私信回复 代码助手 即可获得
更多功能请大家探索