【分享成果,随喜正能量】知行合一,不管做任何的事情,假若你一直去妄想,而不投入实际行动,终究碌碌无为这一生。“耐”——坚持容忍,就算水平再强,但还要经得住时间的考验,这也是人生道路中最宝贵的财富。“勤”——勤能补拙,人生道路不论是做什么事情,只有“勤”字贯穿始终。

《VBA信息获取与处理》教程是我推出第六套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。这部教程给大家讲解的内容有:跨应用程序信息获得、随机信息的利用、电子邮件的发送、VBA互联网数据抓取、VBA延时操作,剪切板应用、Split函数扩展、工作表信息与其他应用交互,FSO对象的利用、工作表及文件夹信息的获取、图形信息的获取以及定制工作表信息函数等等内容。程序文件通过32位和64位两种OFFICE系统测试。是非常抽象的,更具研究的价值。

教程共两册,八十四讲。今日的内容是专题二“VBA代码分类及如何利用代码自动关闭空闲文件”的第1讲:标准模块中的代码

程序模块术语(标准模块中的代码)(1)

第一节 标准模块代码(Standard Code Modules)

标准代码模块,是放置大部分VBA代码的地方。对于新手程序员,所有代码都会将在标准模块中。我们实现的绝大多数的功能也是在标准模块代码中完成的。这讲的内容就是给大家讲解标准模块代码。

1 标准模块代码的组成

一个标准模块代码一般包含三个部分。第一个是编译器指令部分,位于模块的最顶部,它包含诸如Option Explicit和Option Compare Text之类的指令。但这些指令不是必需的,你可以根据自己的习惯在需要的时候使用它们。第二部分称为声明部分,可以声明了模块级或过程级范围的变量。这些变量可以由模块中的任何过程访问,并且即使在执行了一个过程或一组过程并修改了其值之后,这些变量仍保留其值。声明部分也可以包含声明引用函数。这些函数定义通常指向构成Windows操作系统的各种DLL文件中的函数。这些语句Sub、Function或Property过程之前。第三部分是模块中包含的实际代码。代码部分包含执行实际工作的所有代码。

程序模块术语(标准模块中的代码)(2)

上面的代码是本专题将利用的代码,这段代码没有包含上面讲解的第一部分,没有设置强制变量的声明及比较的模式等等,但包含上面讲解的第二部分,这部分声明了一个正常的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

代码的截图:

程序模块术语(标准模块中的代码)(3)

上面的讲解中,无论是SUB过程还是Function过程,都是一个标准模块内的过程。

一个VBA程序工程可以包含任意多个标准代码模块。这使得您可以很容易地将您的过程划分为不同的模块,以便于组织和维护。例如,可以将所有数据库过程放在一个名为database的模块中,将所有数学过程放在另一个名为Math的模块中。只要过程没有Private关键字声明,模块没有标记为Private,就可以从任何其他模块调用,而无需执行任何特殊操作。

本节知识点回向:VBA中代码一般分为几类?标准模块代码一般分为几部分?SUB过程和

Function过程有什么不同?

本节内容详细代码“参考003工作表.XLSM”

程序模块术语(标准模块中的代码)(4)

我20多年的VBA实践经验,全部浓缩在下面的各个教程中,教程学习顺序:

① 7→1→3→2→6→5或者7→4→3→2→6→5。

② 7→8

各套教程内容简介:

第7套教程(共三册):《VBA之EXCEL应用》:是对VBA基本的讲解

第1套教程(共三册):《VBA代码解决方案》:是入门后的提高教程

第4套教程(16G):VBA代码解决方案之视频(第一套的视频讲解)

第3套教程(共两册):《VBA数组与字典解决方案》:是对数组和字典的专题讲解

第2套教程(共两册):《VBA数据库解决方案》:是对数据库的专题讲解

第6套教程(共两册):《VBA信息获取与处理》:讲解VBA的网络及跨程序应用

第5套教程(共两册):VBA中类的解读和利用:类及接口技术的讲解

第8套教程(共三册):VBA之Word应用(最新教程):word中VBA的利用

,