SubFunction 是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

举个例子:




vba程序sub和function的区别 vba sub和function区别_数据类型


1.6.2 Function 函数

vba内部提供了大量的函数,也可以通过Function来定义函数,实现个性化的需求。

[Public|private] [Static] Function 函数名([参数列表 [As 数据类型]]) [As 数据类型]    [语句块]    [函数名=过程结果]End Function

使用函数完成上面的例子:


vba程序sub和function的区别 vba sub和function区别_数据类型_02


参数传递

参数传递的方式有两种,引用和传值。 传值,只是将数据的内容给到函数,不会对数据本身进行修改。 引用,将数据本身传给函数,在函数内部对数据的修改将同样的影响到数据本身的内容。

参数定义时,使用ByVal关键字定义传值,子过程中对参数的修改不会影响到原有变量的内容。 默认情况下,过程是按引用方式传递参数的。在这个过程中对参数的修改会影响到原有的变量。 也可以使用ByRef关键字显示的声明按引用传参。

Sub St1(ByVal n As Integer, ByRef range)    ...Other codeEnd SUb

神器放送

VBA编程神器 VBA代码助手 可以极大提高编程速度,降低编程门槛欢迎使用

私信回复 代码助手 即可获得


vba程序sub和function的区别 vba sub和function区别_数据类型_03


vba程序sub和function的区别 vba sub和function区别_vba子过程或函数未定义_04


更多功能请大家探索