百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

VB/VBA中的函数,用了那么久,其实是这样的

bigegpt 2024-12-18 12:14 6 浏览

前言

函数,对于编程而言,无疑是最基础的概念,其重要性不亚于变量。如果说变量是由编程工具封好的固有特性,那么函数就是编程工具提供给编码人员的最小封装容器。所以,函数是抽象的最小单元,是计算机世界的砖石!如果一个不能解决问题,那就两个,两个不行,就三个…

以下虽然结合VB/VBA,但在编码的世界里,都是通的。

一、VB/VBA编码总是从函数开始

录段宏,总是”Sub MacroN()”。写临时测试,不是”Pirvate sub Test()”就是”Public Function Test()”。 “Private Sub Form_Load()”熟不熟?更别说模块和类模块了,甚至在立即窗口输入”Debug.Print Test”,它们都是函数。

咦?不是说Function是函数,Sub是过程,Property是属性么?是的,在VB/VBA中为了区分,按是否返回,制造了这一说法。但本质上,它们都是函数。不同的是,Sub的返回值为0,Property位于类对象里。

如果说这些,你不以为然,那Excel里的工作簿、工作表、单元格都是函数,你会不会惊讶呢?来给大家看看Excel里,大家熟悉的陌生函数吧:

1、Application

这个想必是不能再熟悉的了,你能想到它也是函数么?人家是这样定义的:HRESULT _stdcall Application([out, retval] Application** RHS);

2、Worksheet

定义是这样的:HRESULT _stdcall Worksheet([out, retval] Worksheet** RHS);

3、ActiveSheet

定义是这样的:HRESULT _stdcall ActiveSheet([out, retval] IDispatch** RHS);

4、Caption

Property Get Caption属性:HRESULT _stdcall Caption([out, retval] VARIANT* RHS);

Property Let Caption属性:HRESULT _stdcall Caption([in] VARIANT RHS);

就不一一列举了,从上面的例子就可以看出,尽管现实中,我们并没有严格按照函数定义那样去使用函数,但正是函数的封装,才让我们有了丰富的概念,和灵活多变的应用场景。比如上述对象的方法、属性,甚至命令行里的命令。

注:前例4中” HRESULT”是返回类型,” _stdcall”是调约,”Caption”是函数名,”()”里的是参数列表,”[in]/[out]”则为传参类型。

二、函数是代码的家

高级程序开发,所有的代码都是写在函数里的,很难找得到不在函数里的代码!正是函数给代码提供了安身之所,形形色色的代码,才得以组建小家和大家,构建起计算机的世界。

函数就代表着逻辑容器,离开了函数,编程就成了空洞的口号,无以为继。甚至连变量,都找不到自己的价值。函数的边界,不仅为逻辑的封装提供了可能,更为资源的配置提供了可能。大家心里不明觉厉的COM,都能在函数身上找到原型。

所以说,函数乃编程之本,要想有所为,关于函数的这些事,你就不得不了解。

三、函数的语法定义

1、函数的定义

函数是具有特定功能的独立代码段,主要用于解决代码冗余和代码复用。

2、函数的语法

在C中,函数的语法是这样的:

权限修饰符 类型修饰符 返回值类型 函数名(参数列表 参数类型 形参1 参数类型 形参2…) {函数体;return 返回值;}

修正为VB/VBA,大概是这样的:

权限修饰符 类型修饰符 函数名(传参类型 参数名 参数类型,…) 返回类型+函数体,也可提炼为:函数头+函数体。

常见权限修饰符为:Public /Private/Friend

常见类型修饰符为:Function/Sub/Property

传参类型为:ByRef/ByVal

3、函数的分类

按函数体的可控性,大致可分为库函数和自定义函数库函数,也即已编译为二进制的各种库,如DLL、EXE,分标准库和COM库。自定义函数,就是大家通常写的那些啦。

4、函数的调用

标准库的函数,在VB里可以使用Declare语句声明。COM库的函数,可以通过引用加入,就可以使用”.”来自动智能提示了。自定义函数,跟变量的用法差不多。

四、函数的秘密

前面,大概就是大家平时对函数的印象了。但函数本身的故事源远流长,不仅涉及到上层的高级应用,在底层编译链接里,也处处都有函数的影子,不是短短几句能说的清楚。但可以抽一些特征(就算秘密吧)出来,以激发大家探索的兴趣。

1、VB的强大很大程度上是依托Win32API,但使用这些API,通常使用Declare语句进行声明。但1条Declare语句至少会花销20字节,而且还受制于VB中DllFunctionCall函数的中转,虽说性能影响不大,但开销大啊

2、COM库函数,不仅可以前期绑定,使用IDE的智能提示,而且应用场景也更加符合人的逻辑。更关键的是性能和开销都有保证啊(肯定有很多人不服)。基于COM的Office,其对象结构不仅理解起来远比其函数原型容易,其提供的二开接口性能简直爆表。这就是为什么Office不会寻求Win32API那样的模式,这也是WPS自身的二开接口,不如VBA接口受欢迎的原因。当然更是VB默认不支持标准库的原因。

3、自定义函数的使用,代码里貌似是直接调用,编译时貌似是换成了地址。其实并非如此,自定义函数编译时的机制跟导入函数表的机制差不多,所以VB本地编译模式下,依然可以还原出高仿源码。当然,其他语言也差不多,只不过难度大些而已。函数的结构,与编译机制是高度相关的。这是为什么VB的IDE里通常硬编码不会生效的原因,当然也是VBA不借助二进制,很难高效的原因。VBA拿着数一数二的虚拟机,却让Python羞了脸,根本原因就是VBA中的函数体,若不借助二进制的库,就只能是VBA语句,相当于单步调试啊,这都不慢,天理难容啊。

暂说这么多吧,函数机制根深蒂固,且待后文慢慢道来!

点击头像加关注,BtOfficer带你涨更多VB底层知识。

相关推荐

了解Linux目录,那你就了解了一半的Linux系统

大到公司或者社群再小到个人要利用Linux来开发产品的人实在是多如牛毛,每个人都用自己的标准来配置文件或者设置目录,那么未来的Linux则就是一团乱麻,也对管理造成许多麻烦。后来,就有所谓的FHS(F...

Linux命令,这些操作要注意!(linux命令?)

刚玩Linux的人总觉得自己在演黑客电影,直到手滑输错命令把公司服务器删库,这才发现命令行根本不是随便乱用的,而是“生死簿”。今天直接上干货,告诉你哪些命令用好了封神!喜欢的一键三连,谢谢观众老爷!!...

Linux 命令速查手册:这 30 个高频指令,拯救 90% 的运维小白!

在Linux系统的世界里,命令行是强大的武器。对于运维小白而言,掌握一些高频使用的Linux命令,能极大提升工作效率,轻松应对各种系统管理任务。今天,就为大家奉上精心整理的30个Linu...

linux必学的60个命令(linux必学的20个命令)

以下是Linux必学的20个基础命令:1.cd:切换目录2.ls:列出文件和目录3.mkdir:创建目录4.rm:删除文件或目录5.cp:复制文件或目录6.mv:移动/重命名文件或目录7....

提高工作效率的--Linux常用命令,能够决解95%以上的问题

点击上方关注,第一时间接受干货转发,点赞,收藏,不如一次关注评论区第一条注意查看回复:Linux命令获取linux常用命令大全pdf+Linux命令行大全pdf为什么要学习Linux命令?1、因为Li...

15 个实用 Linux 命令(linux命令用法及举例)

Linux命令行是系统管理员、开发者和技术爱好者的强大工具。掌握实用命令不仅能提高效率,还能解锁Linux系统的无限潜力,本文将深入介绍15个实用Linux命令。ls-列出目录内容l...

Linux 常用命令集合(linux常用命令全集)

系统信息arch显示机器的处理器架构(1)uname-m显示机器的处理器架构(2)uname-r显示正在使用的内核版本dmidecode-q显示硬件系统部件-(SMBIOS/DM...

Linux的常用命令就是记不住,怎么办?

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux常用文件操作命令(linux常用文件操作命令有哪些)

ls命令在Linux维护工作中,经常使用ls这个命令,这是最基本的命令,来写几条常用的ls命令。先来查看一下使用的ls版本#ls--versionls(GNUcoreutils)8.4...

Linux 常用命令(linux常用命令)

日志排查类操作命令查看日志cat/var/log/messages、tail-fxxx.log搜索关键词grep"error"xxx.log多条件过滤`grep-E&#...

简单粗暴收藏版:Linux常用命令大汇总

号主:老杨丨11年资深网络工程师,更多网工提升干货,请关注公众号:网络工程师俱乐部下午好,我的网工朋友在Linux系统中,命令行界面(CLI)是管理员和开发人员最常用的工具之一。通过命令行,用户可...

「Linux」linux常用基本命令(linux常用基本命令和用法)

Linux中许多常用命令是必须掌握的,这里将我学linux入门时学的一些常用的基本命令分享给大家一下,希望可以帮助你们。总结送免费学习资料(包含视频、技术学习路线图谱、文档等)1、显示日期的指令:d...

Linux的常用命令就是记不住,怎么办?于是推出了这套教程

1.帮助命令1.1help命令#语法格式:命令--help#作用:查看某个命令的帮助信息#示例:#ls--help查看ls命令的帮助信息#netst...

Linux的30个常用命令汇总,运维大神必掌握技能!

以下是Linux系统中最常用的30个命令,精简版覆盖日常操作核心需求,适合快速掌握:一、文件/目录操作1.`ls`-列出目录内容`ls-l`(详细信息)|`ls-a`(显示隐藏文件)...

Linux/Unix 系统中非常常用的命令

Linux/Unix系统中非常常用的命令,它们是进行文件操作、文本处理、权限管理等任务的基础。下面是对这些命令的简要说明:**文件操作类:*****`ls`(list):**列出目录内容,显...