Excel-VBA-编程教程-2015-完整版
程序清单4-2简单的用户定义函数示例。 PublicFunctionShipping(Price) Shipping=Price*0.1 EndFunction
请注意,这个函数使用一个参数(Price).子程序和函数都可以使用参数。不论Price的值
是多少,它都将决定运费额。Price可以是数字和单元格引用。函数返回计算出来的运费,这 个函数可以用在单元格中。 AB
1Price100
2Shipping=shipping(B1)
4.2.1创建过程
创建第一个过程需要两个基本步骤。首先,需要向工作簿中添加一个模块。接着需要向模 块中添加一个工程。对于创建的每一个应用程序,只需添加一次模块。可以使用多个模块,但 这是不必要的。某些开发者喜欢使用多个模块,以便根据他们的目的或者窗体对过程进行组织。 在本练习中,创建的过程只显示一个消息框。
在本练习中创建的过程只显示一个消息框。在本练习中使用Msgbox是为了提供一个可见的 例子,虽然我们还没有介绍过Msgbox语句,但是在本例中将使用它。要创建该过程,请按如下 步骤进行:
1)打开一个新工作簿。
2)选择\工具\宏\编辑器\,打开VBA编辑器窗口。
3)在`VBA编辑器的左面,可以看到\工程资源管理器\窗口。在工程资源管理器窗口的
\上单击鼠标右键,选择\插入\模块\,这样就将一个模块添加到应用程序中了。 (如果你没有看见\工程资源管理器\窗口,可以按Ctrl+R) 4)选择\插入\过程\,显示\添加过程\对话框。
5)输入\第一个工程\作为过程名字。在\类型\分组框中,确认选择了\子程序\。单击\确 定\按钮。这样一个新的过程就添加到模块中了。可以在模块中看到以PublicSub第一个过程 ()开始,以EndSub结束的语句结构。
6)在过程中插入光标,输入以下语句并回车: Msgbox\这是我的第一个过程\
在输入Msgbox后,会自动弹出一个消息框告诉你有关这条命令的信息,称之为自动列表技术。 输入完成的过程如下所示: PublicSub第一个过程() Msgbox\这是我的第一个过程\EndSub
VBA对子程序和函数有如下的命名规则: *名字中可以包含字母数字和下划线。
*名字中不能包含空格句号惊叹号,也不能包含字符@&$#. *名字最多可以包含255个字符。 8
-----------------------页面25-----------------------
Excel-VBA-编程教程-2015-完整版
Excel-VBA-编程教程-2015-完整版
VisualBASIC程序设计网络教学橄榄树 整理
4.2.2运行宏
创建这个过程后,可以运行一下。运行一个过程有几种方法:可以直接使用\运行\菜单,\运行子程序/用户窗体\工具栏按钮或按下F5键。要运行一个过程,可以按照如下步骤: 1)单击\运行子程序/用户窗体\工具栏按钮,过程执行并显示一个消息框。 2)单击消息框之中的\确定\按钮,关闭该消息框。
4.3保存对模块所做的改变
要保存新过程,需要保存过程所驻留的工作簿.可以用VBA编辑器保存工作簿.具体步骤如 下:
1)选择\文件\保存工作簿\因为本工作簿还没有保存过,所以要给它命名.
2)输入\作为文件名并按回车键,则工作簿和模块与过程都保存下来了.第四课理 解变量和变量的作用 ExcelHome
4.4变量
变量是用于临时保存数值的地方.每次应用程序运行时,变量可能包含不同的数值,而在程 序运行时,变量的数值可以改变.
为了说明为什么需要变量,可以按照如下步骤创建一个简单的过程: 1)创建一个名为\你叫什么名字\的过程. 2)在过程中输入如下代码: Inputbox\输入你的名字:\
现在不要担心inputbox语句的语法,将在第六学时中了解到有关这条命令的更多信息. 3)按下F5键运行过程,这时会显示一个输入框,要求输入你的名字. 4)输入你的名字并按\确定\按钮,则结束该过程.
你输入的名字到那里去了?如何找到用户在输入框中输入的信息?在这种情况下,需要使用 变量来存储用户输入的结果. 4.4.1变量的数据类型
使用变量的第一步是了解变量的数据类型.变量的数据类型控制变量允许保存何种类型的
数据.表4-1列出了VBA支持的数据类型,还列出了各种类型的变量所需要的存储空间和能够存 储的数值范围.
数据类型存储空间数值范围 Byte1字节0-255
Booleam2字节True或者False Integer2字节-32768-32767
Long(长整型)4字节-2147483648-2147483647
Single4字节负值范围:-3.402823E38--1.401298E-45 正值范围:1.401298E-45-3.402823E38
Double8字节负值范围:-1.79769313486232E308- -494065645841247E-324
正值范围:4.94065645841247E-324-
Excel-VBA-编程教程-2015-完整版
Excel-VBA-编程教程-2015-完整版
1.79769313486232E308
Currency8字节-922337203685477-922337203685477
Decimal14字节不包括小数时:+/-79228162514264337593543950335 包括小数时:+/7.9228162514264337593543950335 Date8字节1000年1月1日-9999年12月31日 Object4字节任何引用对象
String(长字符串)10字节+1字节/字符0-约20亿 String(固定长度)字符串的长度1-约65400
Varient(数字)16字节Double范围内的任何数值
Varient(文本)22字节+1字节/字符数据范围和变长字符串相同 表4-1VBA数据类型
作为ABV程序员,一个目标是选择需要存储空间尽量小的数据类型来保存所需要的数据, 这正是表4-1提供各种数据类型存储空间的原因。例如,要保存诸如班级学生总数这样的小数 9
-----------------------页面26-----------------------
VisualBASIC程序设计网络教学橄榄树 整理
字,那么Byte数据类型就足够了。在这种情况下,使用Single数据类型只是对计算机存储空 间的浪费。
4.4.2用Dim语句创建变量(声明变量)
现在,你对变量可以使用的数据类型已经比较熟悉了,以下我们将创建变量.创建变量可以 使用Dim语句,创建变量通常成为\声明变量\语句的基本语法如下: Dim变量名AS数据类型
这条语法中的变量名代表将要创建的变量名.对变量的命名规则和对过程的命名规则相同. 这条语句中的数据类型部分可以是表4-1中的任何一种数据类型.
变量名必须以字母开始,并且只能包含字母数字和特定的特殊字符,不能包含空格句号惊叹 号,也不能包含字符@&$#.名字最大长度为255个字符
在接下来的练习中将说明如何在VBA中使用变量,你将要输入你的名字,并用一个消息框将 其显示出来.具体步骤如下:
1)创建一个名为\显示你的名字\的子程序. 2)输入以下代码:
PublicSub显示你的名字() Dims名字AsString
s名字=Inputbox(\请输入你的名字:\Msgbox\你好\名字 EndSub
3)将鼠标放到过程中的任何地方,按下F5键运行过程,会显示一个输入框.
4)输入你自己的名字并按回车键,会显示一个消息框,显示的文字中包含你自己的名字. 5)单击\确定\按钮,返回过程中.
在Dim语句中不必提供数据类型.如果没有数据类型,变量将被定义为Variant类型,因为
VBA中默认的数据类型是Variant.你知道这一点后,最初的反应也许是觉得应该不用自己决定
Excel-VBA-编程教程-2015-完整版
Excel-VBA-编程教程-2015-完整版
数据类型,而将一切抛给VBA.这种观念是完全错误的.你必须决定选择使用何种数据类型。因为 Variant数据类型占用存储空间较大(16或22字节)而且它将影响程序的性能。VBA必须辨别 Variant类型的变量中存储了何种类型的数据。 4.4.3变量命名的惯例
下表给出了推荐的变量命名惯例 数据类型短前缀长前缀 Arrayaary Booleanfbin Bytebbit Currencyccur Doubleddbl
Date/Timedtdtm/dat Integeriint Longllng Objectoobj Singlesng Stringsstr Variantvvar
表4-2变量命名的前缀 4.4.4使用数组
如果你使用过其他编程序语言,可能对数组已经比较熟悉了.数组是具有相同数据类型并共 同享有一个名字的一组变量的集合.数组中的元素通过索引数字加以区分,定义数组的方法如 下:
Dimarray_name(n)Astype(其中n是数组元素的个数)
例如,如果要创建保存10个学生名字的数组,可以用以下语句: Dims学生名字(9)AsInteger
注意,括号中的数字是9而不是10.这是因为在默认的情况下,第一个索引数字是0.数组在
处理相似信息时非常有用.假设要处理15门考试成绩,可以创建15个独立的变量,这意味着要使 用15个Dim语句。也可以创建一个数组来保存考试成绩,具体如下: 10
-----------------------页面27-----------------------
VisualBASIC程序设计网络教学橄榄树 整理
Dims考试成绩(14)AsInteger
声明数组时的另一种方法是不给定大小。可以在程序运行时定义其大小。通过创建动态数 组就可以做到。例如,你的程序要创建一表格,可以提示用户输入表格的行和列的数目。声明 动态数组的语法如下: Dimdyn_array()Astype
对数组声明后可以在程序运行时用:ReDim语句指定数组的大小: ReDimdyn_array()(array_size)
参数array_size代表数组的新大小。如果要保留数组的数值,请在ReDim语句后使用保留
Excel-VBA-编程教程-2015-完整版
Excel-VBA-编程教程-2015-完整版
字Preserve,具体语法如下:
ReDimPreservedyn_array(array_size) 4.4.5变量赋值
声明变量后就可以给变量赋值。请注意下列语句中为数组变量赋值时索引数字的使用。 程序清单4-4
Dimi人数AsInteger Dimi考试成绩AsInteger DimiAsInteger
i人数=inputbox(\输入学生的人数:\ReDimPreservei考试成绩(i数量) Fori=1toi人数
i考试成绩(i)=inputbox(\输入考试成绩\Next
第五课利用VBA设置工作表使用权限
ExcelHome
一般保护工作表采取的方法是用EXCEL菜单中的\保护\命令,有时这尚嫌不足,比如一些机密 文件根本要让某些使用者无法看到,但又需要他来操作工作簿中的其他表,怎么办?
可以打开VBA编辑器,打开\工程资源管理器\,双击该工作表,现在出现的是设置该表的属性 的编辑窗口,单击窗口左上的下拉列表框,选择worksheet,这时再从该窗口右上方的列表框 中选择Active(\激活\),这时自动显示如下的语句块: PrivateSubWorksheet_Activate() EndSub
在其中加入代码:(假设用\作为密码,Sheet\机密文档\为限制权限文 档,sheet\普通文档\为工作簿中你认为任何适合的工作表) IfApplication.InputBox(\请输入操作权限密码:\Range(\Else
Msgbox\密码错误,即将退出!\Sheets(\普通文档\Endif
程序如下:
PrivateSubWorksheet_Activate()
IfApplication.InputBox(\请输入操作权限密码:\Range(\Else
MsgBox\密码错误,即将退出!\Sheets(\普通文档\EndIf EndSub
这样做仍有一个问题,就是越权使用者仍会看到一些文件的片段,即在提示密码的那段时间。 好,你可以这样做,用上述方法选择工作表的Deactivate事件,输入以下代码: Sheets(\机密文档\
Excel-VBA-编程教程-2015-完整版