学习Excel技术,关注微信公众号:

excelperfect

在《Excel VBA解读(27):看看VBA的Sub过程和Function过程》中,我们讲解了Function过程的基本形式。在《Excel VBA解读(121):Sub过程详解——枯燥的语法》中,我们详细介绍了Sub过程的语法。与讲解Sub过程一样,本文主要详细讲解Function过程的语法,虽然枯燥一些,但这是VBA最基础的知识。了解得越全面,在遇到问题时就能很快发现问题所在,也能很快想到解决办法。

Function过程的语法

Function过程的完整语法形式如下:

[Public| Private | Friend] [Static] Function 过程名称[(参数)][As 类型] [()]

[此处放置代码语句]

[过程名称= 表达式 ]

[Exit Function]

[此处放置代码语句]

[过程名称= 表达式 ]

End Function

按照常规约定,在方括号中的内容为可选部分,而方括号中用“|”分隔的内容则是多选一。即,若要使用[Public | Private | Friend],只需根据需要取其一就行了,或者是Public,或者是Private,或者是Friend。

看起来有点复杂!下面来逐一解说。

1.限定词

Public

如果在Function过程中使用Public,则表明可以在该工作簿的所有模块中调用该过程。如果在类模块中使用Public,则可以在工程外部调用该过程。对于Function过程来说,Public是默认值。

Private

如果在Function过程中使用Private,则表明只有过程所在模块中的其他过程才能调用该过程。

Friend

仅在类模块中有效。如果在类模块的Function过程中使用Friend,则表明可以在工程的所有模块中调用该过程,但不能在该工程外的模块中使用该过程。

以上3个可选的关键字涉及到作用域,也就是指定了过程的影响范围。作用域是一个很重要的概念,我们在《Excel VBA解读(122):变量的作用域和生存期》中已经专门讲述。

Static

在过程调用时,保留该过程内部声明的变量值,即保持该过程内所声明的变量的值不变。

2.参数

过程名称后的括号中,可以为空,也可以放置参数。参数就是从调用过程传递给函数过程的变量列表,变量之间用逗号分隔。

其详细的语法如下:

[Optional] [ByVal | ByRef][ParamArray]变量名[()] [As 类型] [=默认值]

Optional

用来指定参数是可选的,也就是说在调用该过程时不一定要提供这个参数。但是,如果使用Optional指定了某参数可选,那么该参数后面的所有参数也必须是可选的。注意,参数ParaArray不是可选参数。

ByVal

指定参数通过值传递,也就是说,将该参数值赋给变量的副本。在调用过程中对参数值的改变,不会影响被调用过程的参数值。

ByRef

指定参数通过引用传递,也就是说,变量是对被传递参数的引用。在被调用过程中对参数值的修改,会影响调用过程中的参数值。这是默认的传递参数的方法。

ParamArray

指定参数是包含任意元素的可选变体数组,只能作为参数列表的最后一个元素,并且不能与ByRef、ByVal或者Optional同时使用。

变量名

可以包含参数引用或参数值的局部变量名称。

类型

指定参数的数据类型。

默认值

对于可选参数,可以为其指定一个缺省值。

3.As 类型

用来指定Function过程返回的数据类型。

4.Function

表示函数过程的开始。

5.过程名称

每个Function过程必须有一个名称。其命名规则与变量相同,参见《Excel VBA解读(15):变量和常量》。通常,过程名称最好能简单表达该过程的作用。

6.表达式

函数过程返回给调用过程的值。

7.Exit Function

提前退出函数过程。

8.End Function

表示过程的结束。

使用规则

1.如果模块开头放置了Option Private语句,那么即便使用Public声明了Function过程,该过程也会被看成是Private的。

2.Function过程返回值,这是通过对函数过程名称赋值来传递给调用过程的,可以作为表达式的一部分。

3.函数过程名赋值可以在该过程内多次执行。

4.Function过程可以包括任意条Exit Function语句,用来强制退出该过程。程序将从调用该过程的语句的下一行代码继续执行。在执行Exit Function语句时,若没有给函数过程赋值,则返回具有指定的返回值数据类型的缺省值。若函数过程返回的数据类型是一个对象引用,则强制退出时返回值Nothing。

5.要从函数过程返回对象引用,必须使用Set语句赋值给函数过程名作为返回值。

6.函数过程的返回值可以是某类型的数组。但是,在函数过程声明时,指定的数据类型后面必须加上小括号;此外,在调用过程中接受函数过程返回值的数组必须与函数过程的数据类型相同。一般在调用过程中,将接受返回值的数组声明为动态数组。

7.在参数列表中不能出现用户定义类型作为可选参数。

8.可选对象参数的缺省值只能为Nothing。

在接下来的几篇文章中,我将围绕Function过程来详细讲解。

navicat存储过程返回值为空_Excel VBA解读(128):Function过程详解——枯燥的语法...相关推荐

  1. New的返回值和New的(3种)用法详解

    我们知道,使用malloc/calloc等分配内存的函数时,一定要检查其返回值是否为"空指针"(亦即是检查分配内存的操作是否成功),这是良好的编程习惯,也是编写可靠程序所必需的.但 ...

  2. php返回图片给安卓_android上传图片到PHP的过程详解

    今天在做上传头像的时候,总是提交连接超时错误,报错信息如下:XXXXXXSokcetTimeOutXXXXXXXX 然后自己设置HTTP的超时时间: [java] view plaincopyprin ...

  3. 调用个别f5 负载端口为80的vs时,返回值为空的问题

    现状: vs负载端口为80并添加XFF,pool包含2个member,member的monitor端口为80&9000. 故障现象: 应用同事描述说再完全复制了一个member并添加到pool ...

  4. C#获取存储过程返回值和输出参数值的方法

    //转自网络,先留个底 1.获取Return返回值 //存储过程 //Create PROCEDURE MYSQL // @a int, // @b int //AS // return @a + @ ...

  5. 获取存储过程返回值及代码中获取返回值

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  6. 获取存储过程返回值及代码中获取返回值(转)

    获取存储过程返回值及代码中获取返回值 1.OUPUT参数返回值例: 向Order表插入一条记录,返回其标识 CREATE PROCEDURE [dbo].[nb_order_insert]( @o_b ...

  7. mock如何为空_Mockito怎么样Mock返回值为空的方法

    [在前面文章中,讨论了如何直接减少构造函数和方法的参数,比如通过自定义类型.引入参数对象.Builder模式.重载和方法命名来减少参数.你可能会奇怪为什么会讨论方法返回 Mockito怎么样Mock返 ...

  8. 存储过程系列之存储过程返回值总结

    sql存储过程返回值总结 1. 存储过程没有返回值的情况(即存储过程语句中没有return之类的语句)用方法 int count = ExecuteNonQuery(..)执行存储过程其返回值只有两种 ...

  9. IntelliJ IDEA设置方法注释模板并解决入参和返回值为空问题

    ## 简介 网上讲解设置方法注释模板的文章很多,尝试了很多方法后,发现在方法体外生成的模板入参值和返回值都是null,而放到方法体内的入参值和返回值就可以自动生成.苦试N次,终于发现诀窍.Idea的这 ...

最新文章

  1. 区分HPUX是Itanium还是PA-RISC
  2. GROMACS运行参数之em_real.mdp文件详解
  3. python和c哪个好找工作-Python和c哪个效率高一些
  4. 高斯消元整数版和浮点数版实现
  5. RHEL5.X 重启网卡出现./network-functions: line 78: .: ifcfg-eth0: file not found
  6. unittest测试框架详谈及实操(四)
  7. 传统云纹祥云素材,稳妥传承中国味!
  8. 物理层协议:RS-232-C、RS-449、V.35、X.21
  9. 菜单 optionmenu
  10. AE “每用户订阅上的所有人SID 不存在”
  11. 浅谈数据结构之顺序队列(五)
  12. 二、appium的原理
  13. java-net-php-python-jsp安利达物流公司管理系统计算机毕业设计程序
  14. 电脑常用快捷键大全(收藏)
  15. 平均增长率不用计算机,官方数据:平均增长率计算公式如何使用excel计算平均增长率...
  16. 常见Web服务器简介
  17. android8.0 桌面图标适配
  18. java dbutils工具类_DbUtils工具类使用
  19. Android设备与USB设备的连接通讯
  20. CTF密码学部分知识总结(一)

热门文章

  1. 【安卓开发】AndroidStudio项目提交到github最详细步骤
  2. C#LeetCode刷题之#88-合并两个有序数组(Merge Sorted Array)
  3. 如何在Angular 10中生成QR码
  4. SpringBoot-Web原生组件的注入
  5. 教你使用Python实现新个税计算器
  6. 利用python开发购物车系统
  7. Django框架——中间件
  8. Python高级——import导入模块
  9. 简单网络管理协议SNMP
  10. Auto Encoder再学习