vba帖
- 格式:doc
- 大小:350.00 KB
- 文档页数:67
VBA教程-2(转贴)2007-04-25 13:154.1 代码存在的位置:模块VBA代码必须存放在某个位置,这个地方就是模块。
有两种基本类型的模块:标准模块和类模块。
模块中的每个过程或者是函数过程,或者是子程序概念.本课的最后部分将讨论函数过程和子程序的区别。
新术语:模块:它是作为一个单元保存在一起的VBA定义和过程的集合。
类模块:VBA允许你创建自己的对象,对象的定义包含在类模块中。
你的大部分工作集中在标准模块中(简称为模块)当录制宏时如果不存在模块,EXCEL 自动创建一个。
EXCEL和VBA不关心代码存放在哪一个模块中,只要代码存在于打开的工作簿中即可。
4.2 对模块的概览过程被定义为VBA代码的一个单元,过程中包括一系列用于执行某个任务或是进行某种计算的语句。
工作簿的每个过程都有唯一的名字加以区分。
有两种不同的过程:子程序和函数过程。
子程序只执行一个或多个操作,而不返回数值。
当录制完宏查看代码时,所看到的就是子程序。
宏只能录制子程序,而不能录制函数过程。
一个子程序的例子如清单4-1所示。
程序清单4-1 子程序的例子Sub cmdSmallFont_Click()With Selection.Font.Name="Arial".FontStyle="Regular".Size=16End WithEnd sub上面列出的过程实际上是一个事件过程。
通过它的名字,就可以知道这是一个事件过程。
这个过程的名字是由一个对象的名字CmdSmallFont和一个事件的名字Click组成的,两者之间用下划线分开。
如果还不明白,可以告诉你,CmdSmallFont是一个命令按钮的名字。
也就是说,当单击这个命令按钮时,就会运行这个事件过程。
函数过程通常情况下称为函数,要返回一个数值。
这个数值通常是计算的结果或是测试的结果,例如False 或True.正如前面所说,可以用VBA创建自定义函数。
实际上可以在工作表上使用你创建的函数。
程序清单4-2是一个计算价格的10%为运费的简单例子。
程序清单4-2 简单的用户定义函数示例。
Public Function Shipping(Price)Shipping = Price * 0.1End Function请注意,这个函数使用一个参数(Price).子程序和函数都可以使用参数。
不论Price的值是多少,它都将决定运费额。
Price可以是数字和单元格引用。
函数返回计算出来的运费,这个函数可以用在单元格中。
A B1 Price 1002 Shipping =shipping(B1)4.2.1 创建过程创建第一个过程需要两个基本步骤。
首先,需要向工作簿中添加一个模块。
接着需要向模块中添加一个工程。
对于创建的每一个应用程序,只需添加一次模块。
可以使用多个模块,但这是不必要的。
某些开发者喜欢使用多个模块,以便根据他们的目的或者窗体对过程进行组织。
在本练习中,创建的过程只显示一个消息框。
在本练习中创建的过程只显示一个消息框。
在本练习中使用Msgbox是为了提供一个可见的例子,虽然我们还没有介绍过Msgbox语句,但是在本例中将使用它。
要创建该过程,请按如下步骤进行:1)打开一个新工作簿。
2)选择"工具"-"宏"-"Visual Basic编辑器",打开VBA编辑器窗口。
3)在`VBA编辑器的左面,可以看到“工程资源管理器”窗口。
在工程资源管理器窗口的“Thisworkbook"上单击鼠标右键,选择“插入”-“模块”,这样就将一个模块添加到应用程序中了。
(如果你没有看见“工程资源管理器”窗口,可以按Ctrl+R) 4)选择“插入”“过程”,显示“添加过程”对话框。
5)输入“第一个工程”作为过程名字。
在“类型”分组框中,确认选择了“子程序”。
单击“确定”按钮。
这样一个新的过程就添加到模块中了。
可以在模块中看到以Public Sub 第一个过程()开始,以End Sub结束的语句结构。
6)在过程中插入光标,输入以下语句并回车:Msgbox "这是我的第一个过程"在输入Msgbox后,会自动弹出一个消息框告诉你有关这条命令的信息,称之为自动列表技术。
输入完成的过程如下所示:Public Sub 第一个过程()Msgbox "这是我的第一个过程"End SubVBA对子程序和函数有如下的命名规则:* 名字中可以包含字母数字和下划线。
* 名字中不能包含空格句号惊叹号,也不能包含字符@ & $ #.* 名字最多可以包含255个字符。
4.2.2 运行宏创建这个过程后,可以运行一下。
运行一个过程有几种方法:可以直接使用“运行”菜单,“运行子程序/用户窗体”工具栏按钮或按下F5键。
要运行一个过程,可以按照如下步骤:1)单击“运行子程序/用户窗体”工具栏按钮,过程执行并显示一个消息框。
2)单击消息框之中的“确定”按钮,关闭该消息框。
4.3 保存对模块所做的改变要保存新过程,需要保存过程所驻留的工作簿.可以用VBA编辑器保存工作簿.具体步骤如下:1)选择"文件"-"保存工作簿".因为本工作簿还没有保存过,所以要给它命名.2)输入"HOUR4"作为文件名并按回车键,则工作簿和模块与过程都保存下来了.4.4 变量变量是用于临时保存数值的地方.每次应用程序运行时,变量可能包含不同的数值,而在程序运行时,变量的数值可以改变.为了说明为什么需要变量,可以按照如下步骤创建一个简单的过程:1)创建一个名为"你叫什么名字"的过程.2)在过程中输入如下代码:Inputbox "输入你的名字:"现在不要担心inputbox语句的语法,将在第六学时中了解到有关这条命令的更多信息.3)按下F5键运行过程,这时会显示一个输入框,要求输入你的名字.4)输入你的名字并按"确定"按钮,则结束该过程.你输入的名字到那里去了?如何找到用户在输入框中输入的信息?在这种情况下,需要使用变量来存储用户输入的结果.4.4.1 变量的数据类型使用变量的第一步是了解变量的数据类型.变量的数据类型控制变量允许保存何种类型的数据.表4-1列出了VBA支持的数据类型,还列出了各种类型的变量所需要的存储空间和能够存储的数值范围.数据类型存储空间数值范围Byte 1字节0 - 255Booleam 2字节True或者FalseInteger 2字节-32768 - 32767Long(长整型) 4字节-2147483648 - 2147483647Single 4字节负值范围:-3.402823E38 - -1.401298E-45正值范围:1.401298E-45 - 3.402823E38Double 8字节负值范围:-1.79769313486232E308 - -494065645841247E-324正值范围:4.94065645841247E-324 - 1.79769313486232E308Currency 8字节-922337203685477 - 922337203685477Decimal 14字节不包括小数时:+/-79228162514264337593543950335包括小数时:+/7.9228162514264337593543950335Date 8字节1000年1月1日- 9999年12月31日Object 4字节任何引用对象String(长字符串)10字节+1字节/字符0 - 约20亿String(固定长度)字符串的长度1 - 约65400V arient(数字)16字节Double范围内的任何数值V arient(文本)22字节+1字节/字符数据范围和变长字符串相同表4-1 VBA数据类型作为ABV程序员,一个目标是选择需要存储空间尽量小的数据类型来保存所需要的数据,这正是表4-1提供各种数据类型存储空间的原因。
例如,要保存诸如班级学生总数这样的小数字,那么Byte数据类型就足够了。
在这种情况下,使用Single数据类型只是对计算机存储空间的浪费。
4.4.2 用Dim语句创建变量(声明变量)现在,你对变量可以使用的数据类型已经比较熟悉了,以下我们将创建变量.创建变量可以使用Dim语句,创建变量通常成为"声明变量" Dim语句的基本语法如下:Dim 变量名AS 数据类型这条语法中的变量名代表将要创建的变量名.对变量的命名规则和对过程的命名规则相同.这条语句中的数据类型部分可以是表4-1中的任何一种数据类型.变量名必须以字母开始,并且只能包含字母数字和特定的特殊字符,不能包含空格句号惊叹号,也不能包含字符@ & $ #.名字最大长度为255个字符在接下来的练习中将说明如何在VBA中使用变量,你将要输入你的名字,并用一个消息框将其显示出来.具体步骤如下:1)创建一个名为"显示你的名字"的子程序.2)输入以下代码:Public Sub 显示你的名字()Dim s名字As Strings名字= Inputbox("请输入你的名字:")Msgbox "你好"& s名字End Sub3)将鼠标放到过程中的任何地方,按下F5键运行过程,会显示一个输入框.4)输入你自己的名字并按回车键,会显示一个消息框,显示的文字中包含你自己的名字.5)单击"确定"按钮,返回过程中.在Dim语句中不必提供数据类型.如果没有数据类型,变量将被定义为V ariant类型,因为VBA中默认的数据类型是V ariant.你知道这一点后,最初的反应也许是觉得应该不用自己决定数据类型,而将一切抛给VBA.这种观念是完全错误的.你必须决定选择使用何种数据类型。
因为V ariant数据类型占用存储空间较大(16或22字节)而且它将影响程序的性能。
VBA 必须辨别V ariant类型的变量中存储了何种类型的数据。
4.4.3 变量命名的惯例下表给出了推荐的变量命名惯例数据类型短前缀长前缀Array a aryBoolean f binByte b bitCurrency c curDouble d dblDate/Time dt dtm/datInteger i intLong l lngObject o objSingle sngString s strV ariant v var表4-2 变量命名的前缀4.4.4 使用数组如果你使用过其他编程序语言,可能对数组已经比较熟悉了.数组是具有相同数据类型并共同享有一个名字的一组变量的集合.数组中的元素通过索引数字加以区分,定义数组的方法如下:Dim array_name(n) As type (其中n是数组元素的个数)例如,如果要创建保存10个学生名字的数组,可以用以下语句:Dim s学生名字(9) As Integer注意,括号中的数字是9而不是10.这是因为在默认的情况下,第一个索引数字是0.数组在处理相似信息时非常有用.假设要处理15门考试成绩,可以创建15个独立的变量,这意味着要使用15个Dim语句。