模块代码(标准模块代码)
大家好,最近推出的内容是"VBA信息获取与处理"中的部分内容,这套教程面向中高级人员,涉及范围更广,实用性更强,现在的内容是第三个专题"VBA代码的分类及如何利用代码自动关闭空闲文件"的内容。
大家好,我们这讲开始一个新的专题,这个专题中我们首先讲解一下VBA代码应用的模块(module),然后介绍给大家如何利用VBA代码实现已经打开文件的自动关闭。
我们要知道,模块是代码的容器。所有代码必须写在模块中才能执行。可以将模块看做为一个文件,实际上,我们确实可以将模块导出为一个文本文件。在一个模块中,可以包含几个过程。对于一个小的工程,可以将所有代码放在一个模块中。而对于大的、复杂的项目,可以将代码写在几个模块中,以利于组织和修改。在执行代码时,过程在哪个模块中并不重要。来自一个模块的代码可以调用同一项目中任何其他模块中的代码(注意所调用的过程作用域不是私有的Private)。
另外,我们也可以将一个模块文件,其文件名扩展名为bas,类模块文件,其文件名扩展名为cls或frm(用于用户窗体)通过从VBA编辑器的"文件"菜单中选择"导入"项,将该模块导入到项目中。那么在VBA中代码又是如何进行分类呢?一般来讲,按模块分,代码的可以有四种类型:标准模块代码;工作簿和工作表模块代码;用户窗体模块代码;类模块代码,这个专题我将主要给大家介绍标准模块代码,工作簿和工作表模块代码的知识.对于窗体模块涉及到的内容类似于上述两个部分不再讲解,对于类模块大家可以参考我的专门教程"VBA中类模块的解读及应用"。
第一节 标准模块代码(Standard Code Modules)
标准代码模块,是放置大部分VBA代码的地方。对于新手程序员,所有代码都会将在标准模块中。我们实现的绝大多数的功能也是在标准模块代码中完成的。这讲的内容就是给大家讲解标准模块代码。
1 标准模块代码的组成
一个标准模块代码一般包含三个部分。第一个是编译器指令部分,位于模块的最顶部,它包含诸如Option Explicit和Option Compare Text之类的指令。但这些指令不是必需的,你可以根据自己的习惯在需要的时候使用它们。第二部分称为声明部分,可以声明了模块级或过程级范围的变量。这些变量可以由模块中的任何过程访问,并且即使在执行了一个过程或一组过程并修改了其值之后,这些变量仍保留其值。声明部分也可以包含声明引用函数。这些函数定义通常指向构成Windows操作系统的各种DLL文件中的函数。这些语句Sub、Function或Property过程之前。第三部分是模块中包含的实际代码。代码部分包含执行实际工作的所有代码。
上面的代码是本专题将利用的代码,这段代码没有包含上面讲解的第一部分,没有设置强制变量的声明及比较的模式等等,但包含上面讲解的第二部分,这部分声明了一个正常的Public变量: RunWhen,这个变量是在整个工程中有效的。还声明了一个常数的NUM_MINUTES,这个常数的意义就是我们将要经过多长时间让这个文件自动关闭。在上面的SUB过程就是我们前面提到的第三部分过程代码。
2 标准模块代码中的过程分类
过程是可以作为一个单元执行的代码块。所有代码必须属于一个过程。代码不能存在于过程之外。虽然单个模块可以包含一定数量(<=1000)的单个过程,但通常最好将这些过程按相关功能分组为多个模块。这使得项目的组织更好,并可以让某个过程代码得到多次的调用。我们可以使用两种类型的过程。(实际上,有三种类型,但这里不讨论属性过程。)
第一个过程是SUB过程,这个过程可以自己运行,也可以被另一个过程调用,或者调用另外的过程。需要注意的是:sub过程不会向调用它的过程提供返回值,它只是执行,然后将程序运行的控制权再返回给调用它的过程。如果它没有被另一个过程调用,只是自己的运行,则终止代码执行。
第二个过程是函数Function过程,这个过程类似于SUB过程,只是函数可以将值返回给调用它的过程。函数通常将一个或多个参数作为输入,并将单个值返回给调用者,调用者的值取决于输入参数的值。我们来看看下面的的代码,SUB过程MYNZ调用函数过程CircleArea,将圆的半径传递给它。CircleArea函数接受此输入,进行简单计算,并将结果返回给调用方过程。
Sub MYNZ()
Dim Area As Double
Dim Radius As Double
Radius = 11
Area = CircleArea(Radius)
MsgBox "The area is: " & CStr(Area)
End Sub
Function CircleArea(Radius As Double) As Double
CircleArea = 3.14159 * (Radius ^ 2)
End Function
代码的截图:
上面的讲解中,无论是SUB过程还是Function过程,都是一个标准模块内的过程。
一个VBA程序工程可以包含任意多个标准代码模块。这使得您可以很容易地将您的过程划分为不同的模块,以便于组织和维护。例如,可以将所有数据库过程放在一个名为database的模块中,将所有数学过程放在另一个名为Math的模块中。只要过程没有Private关键字声明,模块没有标记为Private,就可以从任何其他模块调用,而无需执行任何特殊操作。
本节知识点回向:VBA中代码一般分为几类?标准模块代码一般分为几部分?SUB过程和
Function过程有什么不同?
本节内容详细代码"参考003工作表.XLSM"
VBA是利用Office实现自己小型办公自动化的有效手段,这是我对VBA的应用界定。在取代OFFICE新的办公软件没有到来之前,谁能在数据处理方面做到极致,谁就是王者。其中登峰至极的技能非VBA莫属!学习VBA是个过程,也需要经历一种枯燥的感觉,如太白诗云:众鸟高飞尽,孤云独去闲。相看两不厌,只有敬亭山。
"水善利万物而不争",绵绵密密,微则无声,巨则汹涌。学习亦如此,知道什么是自己所需要的,不要蜷缩在一小块自认为天堂的世界里,待到暮年时再去做自欺欺人的言论。要努力提高自己,用一颗充满生机的心灵,把握现在,这才是进取。越是有意义的事情,困难会越多。愿力决定始终,智慧决定成败。不管遇到什么,都是风景。看淡纷争,看轻得失。茶,满也好,少也好,不要计较;浓也好,淡也好,其中自有值得品的味道。去感悟真实的时间,静下心,多学习,积累福报。而不是天天混日子,也不是天天熬日子。在后疫情更加严峻的存量残杀世界中,为自己的生存进行知识的储备,特别是新知识的储备。学习时微而无声,利用时则巨则汹涌。
我记得20年前自己初学VBA时,那时的资料甚少,只能看源码自己琢磨,真的很难。20年过去了,为了不让学习VBA的朋友重复我之前的经历,我根据自己多年VBA实际利用经验,推出了六部VBA专门教程。
第一套:VBA代码解决方案 是VBA中各个知识点的讲解,覆盖绝大多数的VBA知识点,初学必备;
第二套:VBA数据库解决方案 数据库是数据处理的专业利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,适合中级人员的学习。
第三套:VBA数组与字典解决方案 数组和字典是VBA的精华,字典是VBA代码水平提高的有效手段,值得深入的学习,是初级及中级人员代码精进的手段。
第四套:VBA代码解决方案之视频 是专门面向初学者的视频讲解,可以快速入门,更快的掌握这门技能。
第五套:VBA中类的解读和利用 这是一部高级教程,讲解类的虚无与肉身的度化,类的利用虽然较少,但仔细的学习可以促进自己VBA理论的提高。
第六套教程:《VBA信息获取与处理》,这是一部高级教程,涉及范围更广,实用性更强,面向中高级人员。教程共二十个专题,包括:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪切板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。如需要可以可以WeChat: NZ9668
学习的过程也是修心的过程,修一个平静的心。在代码的世界中,心平静了,心情好了,身体自然而然就好。心静则正,内心里没有那么多邪知邪见,也就没有那么多妄想。利人就是利己。这些教程也是为帮助大家起航,助上我自己之力,我的上述教程是我多的经验的传递,大家可以根据以上资料1,3,2,6,5或者是4,3,2,6,5的顺序逐渐深入的逐渐学习。
每一分收获都是成长的记录,怎无凭,正是这种执着,成就了朝霞的灿烂。最后将一阙词送给致力于VBA学习的朋友,让大家感受一下学习过程的枯燥与执着:
浮云掠过,暗语无声,
唯有清风,惊了梦中啼莺。
望星,疏移北斗,
奈将往事雁同行。
阡陌人,昏灯明暗,
忍顾长亭。
多少VBA人,
暗夜中,悄声寻梦,盼却天明。
怎无凭!
分享成果,随喜正能量