-
第
1
讲
什么是
EXCEL VBA
1.1
为什么要学习
EXCEL
VBA
现在,
财务软件已经趋于普及,
会计人员的工作效率大幅度提高,减轻了会计人员大工作强度。
财务软件的优点是从数
据的输入、处理、输出实现了一体化,在会计数据的利用方面,尽管财务软件一直都作改
进,但客观上还是满足不了管理工
作但要求。因此,作实际工作中,
EXCEL
被大量应用,
EXCEL
的特点是简单易用,操作灵活,大大地弥补了会计软件地不
足。但是,
EXCEL
处理数据的缺点是,每一步都要人工操作和控制,对重复性的工作,
每次都要重复去作。
而
EXCEL
VBA
能够将重复的工作编写成程序,这样就能够提高效率和避免人为操作的错误。
p>
1.2
什么是
VBA
VBA(Visual
Basic For Applications)
是微软开发出来在其桌面应用程序中
执行通用的自动化
(OLE)
任务的编程语言。
VBA
是
Visual
Ba
sic
的一个子集
,VBA
不同于
p>
VB
,原因是
VBA
要求有一个宿主应用程序才能远行(需要在
EXCEL
等软件
的运
行下才能运行)
,而且不能用于创建独立应用程序。而
p>
VB
可用于创建独立的应用程序。
VBA<
/p>
可使常用的过程或者进程自动
化,可以创建自定义的解决方案,最
适用于来定制已有的桌面应用程序。
通常意义上的
VBA
就是在
Offi
ce
中包含着的一种加强
Office
功能的
Basic
语言。
经过发展,<
/p>
在
Office
中,
Word
、
Excel
、
Access
、
PowerPoint
等多个软件都有了自己的程序设计语言,
分别称为
WordBasic
、
ExcelBasic
、
AccessBasic
、
PowerPointBasic
(
在
Outlook
中的开发语言为
Visual Basic
Scripting Edition)
。通常统一称为
VBA
(
VB for
Application
)
。
本讲座,主要基于
EXCEL
VBA
进行讲解。
VBA
和
V
B
的区别包括如下几个方面
:
(
1
)
p>
VB
是设计用于创建标准的应用程序
,
p>
而
VBA
是在已有的应用程序
(EXCEL
等
)
下运行,
实行有关操作、处理、查
询等的自动化,提高效率。
(
2
p>
)
VB
具有自己的开发环境
,
而
VBA
必须寄生于已有的
应用程序(如
EXCEL
)
。
(
3
)要运行
VB
开发的应用程序
,
用户不必安装
VB,
因为
VB
开发出的应用程序是可执行文件
(*.EXE),
可独立运行。而
VBA
开发的程序必须依赖于它的
父
应用程序
,
例如
EXCEL
,
p>
如编写的
EXCEL VBA
程序,
没有安装
EXCEL
是无法运行的。
虽然有一些不同
,
VBA
和
VB
在结构上仍然十分相似。
如果你已经对
VB
有一些基础
,
学习
VBA
就非常容易。当掌握
EXCEL VBA
后,对
WORD
、
ACCESS
等中应用
VB
A
创建解决方案,也就基本掌握了。
1.3
应用
EXCEL
VBA
的好处
在
EXC
EL
中,使用
VBA
可以实现的功能主
要包括
:
(
1
)创建
报表。
(
2
)对数据进行复杂的操作和分析。
(
3
p>
)使重复的工作自动化。
(
4
)自定
义
EXCEL
工具栏
,
菜单和界面。
(
5
)自定义
EXCE
L,
使其成为开发平台。
用
EXC
EL
作为开发平台有如下原因
:
(
1
p>
)
EXCEL
本身功能强大
,
包括打印
,
文件处理
,
格式化和文本编辑。大家在
EXCEL
p>
使用中已经掌握了
EXCEL
基本概
念、操作方法,采用
EXCEL
VBA
能够更加提高效率,使用者容易接受。
(
2
p>
)
EXCEL
内置大量函数和处理功能,通
过
EXCEL
VBA
能够高效率地简单应用。
(<
/p>
3
)可连接到多种数据库,便于与财务软件等交换数据。
(
4
)
VBA
简单易学,容易被会计人员及其管理人员掌握,易于大范围推广应用。
用其他语言开发应用程序
,
一半的工
作
是编写一些基本功能的模块
,
包括文件的打开和保存、
处理、
打印等。
而用
E
XCEL
作为开发平台
,
则由于
EXCEL
已经具备
这些基本功能
,
你要做的工作只是使用它。
1.4
怎样学习
EXCEL VBA
p>
掌握
EXCEL
的人很多,
但要在上面编写程序,
也是需要学习的。
要学习
EXCEL
VBA
,
首先应该购买一本
EXCEL
VBA
的书籍,然后对照上面的案例就行学习和操作。同时,要根据自己的业务需要,结
合实际编写一些实用的小功能。
现在网络上的
EXCEL VBA
很多
,遇到问题,可以通过搜索,一般都能够找到。通过积累,逐渐就掌握了。一般需要三
个
月左右的时间。
第
2
讲
EXCEL
VBA
的开发环境和开发过程转载
2.1
什么是
VBE
VBE
(
Visual Basic
Editor
)是编写
VBA
代码的工
具,窗口结构和
VB
的编辑器相似。和
VB
编辑器不同的是,
VBE
不
能单独打开,必须依附于他所支持的应用程序,如
EXCEL
。
2.2
启动
VBE
环境
在
Excel
菜单中,选择工具——宏——
Visual Basic
编
辑器,或者按快捷键
Alt+F11
即可进入。
安全性设置:
要编写
VBA
程序和运行
VBA
程序,
需要进行
“安全性”
设置,
不然编写当
VBA
程序无法运行。
在<
/p>
Excel
菜单中,选择工具——宏——安全性,进入安全性设置
,一般选择“中”
,如果不行就选择“低”
。
< br>
2.3 VBE
的应用
1
进入
VBE
编辑器后,就能编写有关低界面后程序。
VBE
编辑器主要包括
以下部分:
1
、代码窗口。就是在这
里写
VBA
的代码,也是在这里查看代码的。
< br>
2
、对象窗口。可以在这里设定窗体的界面(如果使用了窗体的话)
,在这里能很直观地
设定窗体各个控件的布局。
p>
3
、对象浏览器。在这里可以查看所有对象库、特定对象或你自己的
工程,包括所有的对象的列表与每个对象的成员列
表。
4
、工程
资源管理器。在这里,我们可以很方便地管理工程中的模块、类模块与窗体,还可以很容易地在代码与对象间
p>
切换。
p>
5
、属性窗口。在这里可以很简单地设定很多对象相关的属性,简单
到只要用鼠标选择即可。
6
、工具箱。在插入窗体后,可以从工具箱添加各种控件。
7
、立即窗口。其主要工作是:
(
1
p>
)在开发过程中,用
输出的内容就在此显示
。
(<
/p>
2
)当代码是
Break
模式时,查看对象和变量的状态。
(
3
)用<
/p>
?
加上语句,就可以看到运行的结果,在很多情况下比用
msgbox
报出方便多了。
2.4
使用
VBA
帮助和寻找资源
帮助。
VBA
的帮助中包含
Excel
所有属性、对象、方法
等的说明,学习
VBA
的过程中,经常查阅
VBA
帮助,
对了解
Excel<
/p>
所有属性、对象、方法很有帮助。在查看别人的代码时,对不熟悉的部分,只要将光标移到
其中,再按
F1
键,
就能快速查获到相
关的帮助。我们还可以在帮助的应答向导中,键入相关的关键词,来查找我们需要的内容。
2.
网络的搜索。
网络的好处就在于信息量之巨大,
而要查找到我们
需要的信息时,
最基本的就是用好搜索。
通过如百度、
Google
等,只要键入合适用的关键词,就能找出不少相关的信息。
2.5 EXCEL
VBA
的开发过程
1.
EXCELVBA
开发过程简介
在开发一个具体的业务程序时,需要对以下问题有个大致的考
虑。
1
)
使用者。这决定了程序的操作难度及界面感观。
2)
数据
来源和保存在哪里。这决定了程序的结构。
3)
如何操作。这将决定程序的界面
和细节。
4)
数据处理的结果。最终决定程序的价值。
2.
认识不同的控件
开始时关闭所有工作簿
,
打开一个新工作簿并另存为一个具体名字,一般用项目名称。在工具栏上
单击鼠标右键
,
从快捷
菜单中选择
p>
窗体
显示
窗体
工具栏
.
其中有
16
个控件,只
有
9
个可放到工作表内。
1
)标签:它用于表现静态文本。
2
)分组
框:它用于将其他控件进行组合。
3
)按钮:用于执行宏命令。
4
)复选
框:它是一个选择控件,通过单击可以选择和取消选择,可以多项选择。
5
)选项
按钮:通常几个选项按钮组合在一起使用,在一组中只能选择一个选项按钮。
6
)列表
框:用于显示多个选项并从中选择。只能单选。
7
)组合框:用于显示多个选项并从
中选择。可以选择其中的项目或者输入一个其它值。
8
)滚动条:不是你常见的来给很长
的窗体添加滚动能力的控件,而是一种选择机制。例如调节过渡色的滚动条控件。
包括水
平滚动条和垂直滚动条。
9
)微调控件:也是一种数值选择机制,通过单击控件的箭头来选择数
值。例如改变
Windows
日期或时间就会使用到微
调控件。
3.
向工作表添加控件
4.
设置控件的特性
5.
给控件命名
6.
使用用户窗体
< br>如果希望创建专业级的应用程序
,
并且方便用户输入数据
,
那么应该使用用户窗体。用户窗体可以作为程序的对话框和窗
口
.
向用户窗体添加控件基本类似于向
工作表添加控件。
在对用户窗体设计完成后,可以对其进行预览,方法是在
VBA
编辑器中选择该窗体,单击“运行”菜单中的三角符号
“运行子过程
/
用户窗体”
,三角符号在
VBA
工具栏上也可能看得到,旁边是一个垂直的等于符号,最右边是个小正方形符
号,它们类似于录音机上的按钮。运行窗体的另一个方法是按
F
5
键。
常量、变量与数据类型转载
数据是程序运行的基础,在
EXCEL VBA
中,大量的数据是中
EXCEL
中的,但在程序运行中
,还会有一些程序的控制
数据。
要掌握一种程序语言,
必须了解该语言的数据类型有哪些以及该数据是如何声明的,
以便得知该
数据是使用哪种数据
类型、该数据所能允许使用得最大和最小范围(生存期)
、以及该数据占用多少内存空间。这样程序执行时才不会发生数据
溢出(<
/p>
Overflow
)和浪费内存空间得现象。
执行程序时,必须先将程序和数据加载到计算机的内存(
RAM
)中才能执行,若该数据会随着程序的执行而更改其值,
2
我们称之为变量(
Variable
)
,而不发生变化的则时常量。常
量指的时数据类型特定值的文字表示,常量被用来指定给变量当
作变量值。程序运行时,
语句中的每一个常量,都会分配到内存空间来存放其值。
3.1
标识符
变量和常量需要用一个名称来
标识,这就是标识符。标识符名称第一个字符允许以大小字母、
_
或者中文名称(一般不
建议用中文名称)开头,后面的字符可接
A~Z
、
a~z
、
< br>0~9
或
_
等字符。
3.2
保留字
保留字又称关键词(
Keyword
)
,是程序语言中事先赋予某个
标识符的一个特别意义,因此就不得再重复赋予不同的用
途。
其
用法又一定的规范,
在编写程序时,
这些保留字若出现在程序中
的语句时会以蓝色标示,
以提醒用户这些标识符是属
于系统保留
字不可误用。
这后面的内容中,我们逐步学习涉及到的相关保
留字,如
if
、
then
等等。
3.3
常量
所谓
“
常量”
是指数据类型特定值的文字表示。
常量被用来指定给变量
当作变量值。
程序运行时,
语句中的每一个常量,
都会分配到内存的空间来存放其值。
3.3.1
整数常量
整数常量由数字、
+
(正)
、—(负)所组成。整数常量的表示方
式由:二进制、八进制、十进制、十六进制。十进制
整数常量是一串十进制数,十六进制
常量是
&H
后面跟着一串十六进制数字(
0~9
、
A~F
)
< br>,八进制常量则是
&O
(
O
p>
为字母)
后面跟着一串八进制数字(
0~7
)
。十进制常量直接以阿拉伯数字(
0
~9
)来表示,二八进制常量和十六进制常量则以二进制
数表示
整数常量。常量的类型是由其值或是接在其后的数据类型字符来决定。如果未指定数据类型字符,则在
Integer
类型
范围内的值会采用
Integer
整数数据类型;超出
Intege
r
范围大小的值则采用
Long
长整数
数据类型。由于一般人比较习惯十
进制数,本书所用的数值常量,大都采用十进制数表示
。
3.3.2
浮点常量
浮点常量是整数常量后面跟
着选择性的小数点和尾数,以及选择性的基底为
10
的指数。默
认浮点常量是属于
Double
数据类型。如果指定
Single
、
Double
和
Decimal
数据类型字符,则常量就属于该数据类型
。
数据常量的各数据类型所占的内存空间与可表示的大小范围
如表所示。
浮点常量
数据类型
内存
范围
<
/p>
Byte
(字节)
1Byte0~255
的整数(这种数据类型占用的内存空间最少)
Short
(短整数)
2Bytes
-
32 768~32
767
的整数
Integer
(整数)
4
Bytes
-
2 147 483 648~2 147
483 647
的整数(约有
10
位数
的正负整数)
Long
(长整数)
8Bytes
-
9 223 372 036 854 775 808~9 223 372 036 854 775 8
08
的整数(约有
19
位的正负整数)
Single
(单精度)
4Bytes
正数:
1
.401298
×
E-45
~
3.402823
×
E+38
负数:-
3.402823
×
E+38
~-
1.401298
×
p>
E-45
(有效位数为
7
< br>位,可以表示小数)
Dou
ble
(双精度)
8Bytes
正数:
4.94
×
E-324
~
1.79769313486231
×
E+308
负数:-
1.79769313486
231
×
E+308
~-
4.94
×
E-324
(有
效位数为
15
位,可以表示小数)
Decimal
(货币类型)
16Bytes
整数范围:
+/
﹣
79 228 162 514 264 337 593 543
950 335
浮点数范围:
+/
﹣
7.92287593543950335
最小非零值范围:
+/
﹣
0.0001
< br>(有效位数为
29
位,可以表示小数)
< br>
3.3.3
字符串常量
字符串常量由一连串的字符组合而成,包括中文、英文字母、
空格、数字、特殊符号。字符串常量可细分成:
Char
(字符
)
数据类型和
String
(字符串)
数据类型,其所占的内存空间和允许的范围大小如表所示。
字符串常量
数据类型
内存
范围
Char
(字符)
< br>2Byte0~65535
的整数,为
Unicode<
/p>
码(每一个码代表一个字符)
String
(字符串)变动长度
0~20<
/p>
亿个
Unicode
字符
字符串常量必须使用“”
”双引号头
尾括起来。
3.3.4
布尔常量
布尔常量只有两个值,一个
为“
True
”
、另一个为“
False
”
,分别表示真与假、开与关、
p>
Yes
与
No
等两
种状态。
Boolean
数据
类型常被
使用在关系表达式及逻辑表达式条件式中,用来判断条件成立与否。
3.3.5
日期常量
日期常量代表以
Date
数据类型的值所表示的特定时间。常量可同时指定日期和时间、仅
指定日期或仅指定时间。
日期常量
数据类型
内存
范围
Date
(日期)
8Bytes1/1
/0001 0
:
00
:
00~12/31/1999 11
:
59
:
59 PM
如果
省略日期值,则会假设为公元
1
年
1<
/p>
月
1
日。如果省略时间值,则会假设为<
/p>
12
:
00
:<
/p>
00 AM
。例:
#11:20:00 PM#
(仅指定时间)
#9/9/2004#
(仅指定日期)
#9/9/2004
12:45:00 PM#
(同时指定日期及时间)
3.3.6 variant
Variant
字符串类型的存储空间为
22
字节加上字符串的长度,
其取值范围与变长字符串数据类型的取值范围相同,缺省值为
3
Empty
。
p>
Variant
数字型的存储空间为
16<
/p>
字节,其取值范围与
Double
数据类
型的取值范围相同,缺省值为
Empty
。
3.4
变量和数据类型
为了要避免变量占用
太多的内存空间,
VBA
视数据的大小与数据种类尔给予不同的
数据类型。将变量分成数值、字符
串、布尔、日期等类型。各种数据类型所占用的字节(
Byte
)不相同。
使用变量的第一步是了解变量的数据类型
.
变量的数据类型控制变量允许保存何种类型的数据,各种类型的变量所需要
的存储空间和能够存储的数值范围
VBA
数据类型表
数据类型
存储空间
数值范围
Byte
1
字节
0 - 255
Booleam
2
字节
True
或者
False
Integer
2
字节
-32768 - 32767
Long(
长整型
)
4
字节
-2147483648 - 2147483647
Single
4
字节
负值范围
:-3.402823E38 -
-1.401298E-45
正值范围
:1.401298E-45 -
3.402823E38
Double
8
字节
负值范围
:-1.79769313486232E308 -
-494E-324
正值范围
:4.94E-324 -
1.79769313486232E308
Currency
8
字节
-922337203685477 - 922337203685477
Decimal
14
字节
不包括小数时
:+/-792287593543950335
包括小数时
:+/7.92287593543950335
Date
8
字节
<
/p>
1000
年
1
月
1
日
- 9
999
年
12
月
31
日
Object
4
字节
任何引用对象
String(
长字符串
)10
字
节
+1
字节
/
字符
0 -
约
20
亿
String(
固定长度
)
字符串的长度
1 -
约
65400
Varient
(数字)
16
字节
Double
范围内的任何数值
Varient
(文本)
22
字节
+1
字节
/
字符
数据范围和变长字符串相同
3.5
变量的声明方式
在程序中,要使用变
量,必须先使用
Dim
声明确定其数据类型,若在声明时未设置
其初值,数值变量默认为
0
、
字符串变
量默认为空字符串。
使用
Dim
p>
声明变量的方式如下:
Dim sum
As Integer
声明
sum
为整型变量,初值默认为
0
Dim
string1,string2 As
String
同时声明
string1
、
string2
为字符串类型变量初值空字符串
Dim cost As Integer =50
声明<
/p>
cost
为整型变量,并设初值为
50
第
4
讲
运算符转载
2009-02-03
17:30:04
阅读
26
评论
0
字号:大中小
订阅
运算
符(
Operator
)用来指定数据做何种运算。运算符按照
运算时所需要的操作数(
Operand
)数目分成:单元运<
/p>
算符(
Unary Operator
)
,如:﹣
9
;二元运算符(
Binary Operator
)
,如
a+b
为一个加法表达式(
Expressio
n
)
,其中
a
、
b
为操作数,加号为运算符,由于加号运算符在运算是需要两
个操作数,因此称为二元运算符。
4.1
算术运算符
算术运算符是用来执行一般的数学运算,如:加、减、乘、除和取余数等运算。
算术运算符与表达式
运算符符号
运算符
表达式
+
相加运算符
i=j+k
-
相减运算符
i=j
﹣
k
*
相乘运算符
i=j*k
/
相除运算符
i=j/k
整型除法运算符
i=jk
Mod
取余数运算符
i=jMod k
^
指数运算符
i=5^2
4.2
关系运算符
关系表达式的功能式用来
比较字符串或数值的大小。关系表达式经过运算后,其结果可以为真(
True
)或为假
(
False
)
,通过其结果来决定程序的执行流程。
关系运算符与关系表达式
关系运算符
意义
数学式
关系表达式
=
=
相等
A=B
A= =B
4
<>
不相等
A
≠
B
A<>B
>
大于
A>B
A>B
<
小于
A
A
>=
大于或等于
A
≧
B
A>=B
<=
小于或等于
A
≤
B
A<=B
Like
按样式比较字符串
字符串
Like
样式
Is
比较对象
对象
A
Is
对象
B
TypeOf…Is
测试对象数据类型
If
(
TypeOf
对象
p>
Is
)
Then
Like
子句样式用法如下所示:
Dim chksign As Boolean
chksign = “A” Like “A”
?True
chksign =
“a” Like “A”
?False
chkFlag =
“A” Like “AAA”
?False
4.3
逻辑表达式
逻辑表达式用来测试比较复杂的条件,一般都用来连接多个关系表达式。如:使用
age
变量当年龄,若条件为:
10
≤
30
(大于
10
岁且小于
30
岁)
,其逻
辑表达式的写法如下:
If
(
age>10
)
And (age<=30)
then
其中(
age>10
p>
)和(
age<=30
)两者为关系表达式
,两者间利用
And
逻辑运算符来连接。同样,逻辑表达式的运
算结果只有
真(
True
)或假(
p>
False
)
。逻辑表达式主要有两种类型
的表达方式:
And
、
Or
、
Not
、
XOR
逻辑运算符
AndAlso/OrElse
逻辑
运算符
例如,若
< br>a
值为
6
,求下列逻辑运算后的
结果:
(a>1) And
(a<=10)
‘检查
循环结构俗称重复,
当程序中有某个语句块需要循环执行时使用。
因
此,设计一个
具有结构化的程序,除了必须具有清晰的逻辑分析能力外,要使用以上所述的三种结构来实现。
< br>
5.1
If
语句
“选择
结构”指当程序执行时,需要改变执行的流程时,则必须使用条件来做判断,若满足条件(即结果为
True
)
则执行某个语句段,若不满足条件(即结
果为
False
)则执行另一个语句段。
?
Th
en
?
Else
语句
< br>
在设计程序时,
常会碰到<
/p>
“如果?那么?”
或时
“如果?那么?否
则?”
的情况,
这种情况便要使用
If
?
Then
?或是
If
?
Then
?
Else
?语句来完成。由下面语法可知,若满足条件就执行“
Then
语句块”
,不满足条件
n
就执行“
Else
语句块”
。其中条件可
为关系表达式或多个关系表达式中用逻辑表达式连接的混
合表达式,其语法形式如下所示:
If
(
条件
)
Then [Then
语句块
]
Else [Else
语句块
]
5
End If
?
Then
?
ElseIf
语句
< br>
设计程序时,若碰到“如果?那么?否则如果?那么
?否则”
,便需使用
If
?
Then
?
Elseif
?
Then
?
Else
?语句来完成。如下
面语法,若条件
1
的结果为
True
,则执行“
Then
语句块
1
”
< br>,接着继续执行
EndIf
后面的语句;若条件
1
的结果为
False
,则
检查条件
2
的结果,
若为
True
则执行
“
p>
ElseIf
语句块
2
”
,接着继续执行
EndIf
后面
的语句。
一直到所有结果的条件都不满足
时,才执行
Else
后面的“
Else
语句块”
。其语法如下所示:
If (
条件
1) Then
[Then
语句块
1]
ElseIf
(
条件
2) Then
[ElseIf
语句块
2]
ElseIf
(
条件
3) Then
[ElseIf
语句块
3]
?
ElseIf
[ElseIf
语句块
]
Eed If
5.2 Select
Case
选择语句
程序设计时若碰到多向选择时,当然可使用
If
?
p>
Then
?
ElseIf
< br>或嵌套的
If
?
Then
?
Else
来完成,但是太多的
If
会使得程序的
复杂度提高,造成不易阅读且难维
护;若改用下面的
Select
Case
语句,程序不但看起来简洁而且易维护。如下面语法,若
表达式的结果满足
value1
,则执行“
Value1
语句块”
,再继续执行
End
Select
后面的语句;若表达式的结果不满足
va
lue1
,
满足
value2
,
,则执行“
Value2
语句块”
,依次类推;若都不满足所设置的
Case va
lue
值,便执行“
Value2
语句
块”
Else
语句
块后,再继续执行<
/p>
End
Select
后的语句。其语法形式如下:
Select Case
表达式
Case value1
[value1
语句块
]
?
Case value2
[walue2
语句块
]
End Select
表达式可以为变量、数值或字符串表达式,但要注意
Case
子句中的
value
必须和表达式的数据类型一致
。
5.3
IIf
选择语句
< br>IIf
式一个双重选择函数,如下面语法,若表达式的结果为
True
,则返回
V1
。否则返回
V2
。返回值可以为数值、字符串或
表
达式。
IIf
函数里面若还有
IIF<
/p>
函数就构成嵌套选择结构。其语法形式如下所示:
IIf
(表达式,
< br>V1
,
V2
)
< br>
5.4
循环语句
当程序执行时,需要将某个语句块执行多次时,便需要使用“循环结构”
。按照循环执行
次数确定是否分成
For
?
Next<
/p>
语句
(每次执行循环次数确定)和
Do<
/p>
?语句(次数由当时条件决定)两大类。
?
Next
语句
程序
设计时,若希望由某个值开始,每执行指定的语句块一次,便将该数值增(减)一值,若结果比终值还小(大)<
/p>
,便继
6
续执行该语句块,直到不满足终值才离开该语句块,如重复显示某个数字
10
次、连续输入数据到数组等都必须使用下面语
法来
完成:
For counter
= start To end [Step Increment]
语句块
[Exit For ]
语句块
Next For
若
start
则
Increment
为正。若
Incremen
t=1
则
Step
参数可以省略。若<
/p>
start>end
则
Step
不能省略,且
Increment
为负值。
p>
Start
和
end
参数可以为小数。
Each<
/p>
?
Next
语句
For Each
?
Next
语句和
For
?
p>
Next
功能一样,当满足条件时,会将
F
or
?
Next
间的语句执行一次,直
到不能满足条件为止。
如下面语法,当
group
(指对象的集合或数组)内至少有一个元素,就能进入
For Each
p>
?
Next
循环。一旦进入循环,便会针<
/p>
对
group
内的第一个元素来执行语句
块一次;若
group
内有更多元素,则循环内的语句块就会针
对每个元素来继续执行。当
各元素都执行一次后,循环便结束,继续执行
Next
语句后面的语句。其语法形式如下所示:
For Each element In group
语句块
[Exit For]
[
语句块
]
Next element
其中<
/p>
element
为必要项,是一个变量名称,用来在集合或数组的
每个元素中重复。
Element
的数据类型必须是
group
中元素
的数据类型。
< br>group
为必要项,是一个对象变量,必须引用对象集合或数组
statement
为一选择项,介于
For Eac
h
?
Nex
之间
的一行或数行语句,在
group
内的每个项目发生时执行一
次。
While
?
Loop
语句
设计程序时,当希望条件为
True
时才进入循环,执行循环内的语句块,直到碰到
Loop
再回到
Do
While
,检查是否满足条
件,若满足条件继续执行循环内的语句块,直到不满足才跳离循环
继续执行
Loop
后面的语句。因此,循环内必须有语句将
p>
条件变为
False
,否则会变成无穷循环
而无法跳出。若想中途离开循环可在要离开的地方插入
Exit
Do
即可。
Do While
(条件)
?
[Exit Do]
?
Loop
Until
?
Loop
语句
此语句和
Do While
?
Loop
语句都属于前测试循环,
两者使用上的
差异在于,
若不满足条件才进入循环时,
必须使用
Do Until
?
Loop
;若满足条件才进入循环时,才使用
Do While
?
p>
Loop
。其语法形式如下:
Do Until
(条件)
语句块
[Exit Do]
7
语句块
Loop
5. Do
?
Loop
While
语句
程序中使用循环时,若需要第
1
p>
次进入循环时不必检查是否满足条件,而直接进入循环,第
2
p>
次以后才需要检查
是否满足条件,当条件条件为
True
时,才能再进入循环执行,此时便需要使用
Do<
/p>
?
Loop While
语句。因此此种
情况,循环
至少执行一次,是属于后测试循环。其语法形式如下:
Do
语句块
[Exit Do]
语句块
Loop While
(条件)
6.
Do
?
Loop
Until
语句
< br>此语句和
Do
?
LoopUnt
il
语句都属于后测试循环,
两者使用上的差异在于,
若不满足条件才进入循环时,
必须使用
Do
p>
?
Loop
Until
< br>。若满足条件才进入循环时必须使用
Do
?
Loop While
。其语法形式如下:
Do
语句块
[Exit Do]
语句块
Loop Until
(条件)
在实际应用中,前三种应用会多一些,通过具体多设置,一般
都能达到目的。因此,要把前三种掌握好。
第
6
讲
函数转载
2009-02-03
17:32:56
阅读
39
评论
0
字号:大中小
订阅
6.1
函数概述
< br>函数
(function)
是能完成特定任务的相关语句
和表达式的集合。
当函数执行完毕时,
它会向调用它的语句返回
一个值。
如果不
显示指定函数的返回值类型,就返回缺省的数据
类型值。
函数
Sub
函数是以
Sub
?
End Sub
语句封闭
起来的程序块。每当该函数被调用时,
就会将存放在函数块内的语句执行一次。
执行中若碰到
End
Sub
、
Exit
Sub
< br>或
Return
便离开函数,回到调用此函数的下一个语
句继续望下执行。编写程序时,在模
块、
对象类模块和结构中定
义
Sub
函数。
模块内的
Sub
函数都默认为
Public
< br>,
表示可以从应用程序任何位置调用此
Sub
函数。
除了
Main
函数
外,其他函数是在被调用才执行。
Sub
函数定义的语法如下:
[Private
∣
Public]Sub<
/p>
函数名称(
[
参数类表
< br>]
)
[
程序块
]
[Exit Sub]
End Sub
Sub
函数是以
Public
Sub
或
Private
Sub
开头,最后以
End
Sub
结束。当执行到
End Sub
后即返回紧接再原调用处的下一个语
句继续往下执行。若中途要离开函数,可使用
Exit Sub
语句。
< br>调用
Sub
函数的语法有下列两种方式:
语法
1
:
< br>Call
函数名称(
[
参数列表
]
)
语法<
/p>
2
:函数名称(
[
参数列表
]
)
调用程序与被调用程序之间若无数据传递,参数列表可省略(即不传任何参数)
;若
不省略,参数列表的数目可以是一个或
一个以上的参数。
on
函数
除系统提供的内置函数外,还提供了日期、时间、字符串等函数,另外还可以使用
Function
?
End
Function
函数来编写属于
8
自己的
Function
函数。
Sub
函数和<
/p>
Function
函数两者都可以做参数传递,但两者使用上的主
要差异是
Sub
函数没有返回值,
Fu
nction
函数则有返回
值。有关
F
unction
函数的语法如下:
[Public
∣
Private]
Function
函数名称(
[
参数列
表
]
)
[As
数据类型
]
[
语句块
]
函数名
=
表达式
[Exit Function]
或(
Return
表达式)
End
Function
6.2
测试函数
IsNumeric(x)
是否为数字
,
返回
Boolean
结果,
Tru
e or False
IsDate(x)
是否是日期
,
返回
Boolean
结果,
Tru
e or False
IsEmpty
(
x
)
是否为
Empty,
返回
Boolean
结果,
True or
False
IsArray(x)
指出变量是否为一个数组。
IsError(expression)
指出表达式是否为一个错误值
IsNull(expression)
指出表达式是否不包含任何有效数据
(Null)
。
IsObject(identifier)
指出标识符是否表示对象变量
6.3
数学函数
Sin(X)
、
Cos(X)
、
Tan(
X)
、
Atan(x)
三角函数,单位为弧度
Log(x)
返回
x
的自然对数
Exp(x)
返回
ex
Abs(x)
返回绝对值
Int(number)
、
Fix(number)
都返回参数的整数部分,区别:
Int
将
-8.4
转换成
-9
,而
Fix
将
-8.4
转换成
-8
Sgn(number)
返回一个
Variant
(Integer)
,指出参数的正负号
Sqr(number)
返回一个
Double
,指定参数的平方根
VarType(varname)
返回一个
Integer
,指出变量的子类型
Rnd
(
x
)
返回
0-1
之间的单精度数据,
x
p>
为随机种子
6.4
字符串函数
Trim(string)
去掉
st
ring
左右两端空白
Ltrim(string)
去掉
string
< br>左端空白
Rtrim(string)
去掉<
/p>
string
右端空白
Len(string)
计算<
/p>
string
长度
Left(string, x)
取
string
左段
x
个字符组成的字符串
Right(string, x)
取
string
右段
x
个字符组成的字符串
Mid(string, start,x)
取
str
ing
从
start
位开始的
x
个字符组成的字符串
Ucase(string)
转换为大写
Lcase(string)
转换为小写
Space(x)
返回<
/p>
x
个空白的字符串
Asc(string)
返回一个
integer
,代表字符串中首字母的字符代码
Chr(charcode)
返回
string
< br>,其中包含有与指定的字符代码相关的字符
6.5
转换函数
CBool(expression)
转换为
Boolean
型
CByte(expression)
转换为
Byte
型
CCur(expression)
转换为
C
urrency
型
CDate(expression)
转换为
D
ate
型
CDbl(expression)
转换为
D
ouble
型
CDec(expression)
转换为
D
ecemal
型
CInt(expression)
转换为
I
nteger
型
CLng(expression)
转换为
L
ong
型
CSng(expression)
转换为
S
ingle
型
CStr(expression)
转换为
S
tring
型
CVar(expression)
转换为
V
ariant
型
Val(string)
转换为数据型
Str(number)
转换为
String
6.6
日期函数
9
日期函数
名
称
说
明
IsDate
语法:
IsDate<
/p>
(
表达式)
;
功
能:
若该表达式为日期类型变量时,
返回
True
;
否则返回
False
p>
。
范例:
check=IsDate(
p>
“
2/21/1969
”
< br>)
‘返回
True
;
check=IsDate
(”
Hello
p>
”
)
’返回
Fal
se
Today
语法:
Today
;功能:设置或返回目前系统的日期
Now
语法:
Now
;功能:返回目前系统的日期与时间
Year
p>
语法:
Year
(
datetime
)
;功能:返回公元年。范例:
n=Year
(”
2/12/1999
”
)
‘
n=1999
Month
语法:
Month
(
datetime
)
;功能:返回
1~
12
月份。范例
n=Month(
“<
/p>
5/12/1969
”
)
‘
n=5
Day
< br>语法:
Day
(
datetim
e
)
;功能:返回日期。范例:
n=
(
“
2/21/1969
”
)
‘
n=21
MonthName
语法:
Mont
hName
(月份)
;功能:返回相对应的月份名称。范例:<
/p>
str= MonthName(3)
‘
str=
三月
WeekDay <
/p>
语法:
WeekDay
(
datetime
)
;功能:返回星期几,其值为
p>
1~7
。若返回
1
,表示星期日;返回
2
表示星期一??依
次类推。范例:
n=Weekday
(”
3/14/2003
”
)
‘
n=6
表示这天为星期五
WeekdayName
语法:
We
ekdayName
(
n
)
;功能:返回一星期中的第几天。
n
为
1
则返回星期日;
n
为<
/p>
2
返回星期一??依
次类推。范例:
p>
str=WeekdayName
(
5
p>
)
‘
str=<
/p>
星期四
第
7
讲
操作工作簿转载
2009-02-03 17:33:51
阅读
50
评论
0
字号:大中小
订阅
1.
新建工作簿
Add
方法创建一个新的工作簿,并
添加到
Workbooks
集合中,新工作簿成为活动工作簿。
举例:
作用:新
建一个工作簿,并保存在
E:
盘上,文件名为
< br>
。
举例:
作用:新建一个工作簿,并保存在<
/p>
E:
盘上,文件名为
。
2.
打开工作簿
该方法打开一个已存在的工作簿,其语法稍微有点复杂:
(FileName,UpdateLinks,ReadO
nly,Format,Password,
_WriteResPassWord,
IgnoreReadOnlyRecommended,Origin,Delimiter,
_Editable,Notify,Converter,AddToMRU)
<
/p>
在这些参数中,大多数参数很少用到
(
例
如,几个与打开文本文件有关的参数
)
。所有的参数中,除了<
/p>
FileName
外都是可选
的。
参数
FileN
ame
是所要打开的工作簿的文件名称。如果想要以只读的方式打开工作簿,则可将
p>
ReadOnly
参数设置为
True
p>
。
如果需要用
密码来打开工作簿,
则
PassWord
参数应该设置为该密码。
如果需要使用密码而您没有指定密码,
Excel
将弹出对
话框询问密码。
参数
AddToMru
指定将工作簿添加到最近使用的文件列表中,该参数值设置为
True
便添加该工作簿到最近使用的文件列表
中,该参数的缺省值为
False
。
举例:
(
作用:打开
e:
< br>工作簿文件。
10
举例:
FileName:=
作用与上相同。
举例:
FileName:=
举例:
FileName:=
增加了打开的密码。
3.
激活工作簿
要激活工作簿,就使用
activa
te
方法,工作簿激活后,它将放在活动窗口中。
Workbooks(
工作簿名称<
/p>
).activate
举例:
Workbooks(1).activate
作用:激活第一个工作簿。
4
.保存工作簿
保存指定工作簿:
Workbooks(
工作簿名称<
/p>
保存当前工作簿:
5.
关闭工作簿
Close
方法关闭所有打开的工作
簿。其语法为:
关闭所有的工作簿:
关闭指定的工作簿:
Workbooks(
工作簿名称
< br>
第
8
讲
操作工作表转载
2009-02-03 17:34:29
阅读
90
评论
0
字号:大中小
订阅
插入一个工作表:
在指定工作表前插入工作表:
Before:=Sheets(
工作表名称或工作表序号
)
举例:
Before:=Sheets(“Sheet3”)
Before:=Sheets(3)
11
在指定工作表后插入工作表:
Before:=Sheets(
工作表名称或工作表序号
)
举例:
After:=Sheets(“Sheet3”)
After:=Sheets(3)
在最后插入工作表:
After:=Sheets()
在最前插入工作表:
Before:=Sheets(1)
< br>插入
2
个空白工作表:
Count:=2
这里利用自变量
Count
来控制插入工作表的数量。
检查工作表”
Sheet2
”是否存在:
Private
Sub
检查工作表是否存在
()
Dim iCount As Integer
For iCount = 1 To
If Sheets(iCount).Name =
MsgBox
已经存在
Exit Sub
End If
Next iCount
End
Sub
8.2
选取工作表
选取指定工作表:
Sheets(
工作表名称或工作表序号
).Sele
ct
举例:
Sheets(“Sheet2”).Select
Sheets(2).Select
设置活动工作表:
Sheets(
工作表名称或工作表
序号
).Activate
举例:
Sheets(
12
Sheets(2).
Select
8.3
隐藏工作表
隐藏一个工作表:
Sheets(
工作表名称或工作表
序号
).Visible=0
举例:
Sheets(“Sheet2”).Visible=0
Sheets(2) .Visible=0
取消隐藏一个工作表:
Sheets(
工作表名称或工作表
序号
).Visible=-1
举例:
Sheets(“Sheet2”).Visible=
-1
Sheets(2) .Visible=-1
8.4
复制和移动工作表
1.
复制
复制到指定工作表之前:
Sheets
(工作表名称或工作表序号)
.C
opy
Befor:=Sheets(
工作表名称或工作表序号
)
复制到指定工作表之后:
Sheets
(工作表名称或工作表
序号)
.Copy
After:=Sheets(
工作表名称或工作表序号
)
2.
移动
移动到指定工作表之前:
Sheets
(工作表名称或工作表序号)
.M
ove
Befor:=Sheets(
工作表名称或工作表序号
)
移动到指定工作表之后:
Sheets
(工作表名称或工作表
序号)
.Move
After:=Sheets(
工作表名称或工作表序号
)
8.5
删除工作表
删除指定工作表:
Sheets
p>
(工作表名称或工作表序号)
.Delete
Sheets
(”
< br>Sheet2
”
)
.Delet
e
Sheets
(
2
)
.Delete
根据条件删除工作表
删除工作表名左边两位字符等”
gz
”的工作表
p>
Private Sub
删除满足条件工作表
Dim I as integer
For i = . To 1 Step -1
13
With .Sheets(i)
If Left(.NAME,
2)=
.Delete
End If
End With
Next i
End Sub
8.6
工作表命名
修改指定工作表名称:
Sheets
(工作表名称或工作表序号)
.Name=
工作表名称
p>
把工作表
Sheet2
命名为
GZSheet
Sheets
< br>(”
Sheet2
”
)
.Name=
”
GZSheet
”
Sheets
(
2
)
.Name=<
/p>
”
GZSheet
”
注意:
工作表的名称在一个工作中必须是唯一的,且不区分大小写和全半角的。也就是说在工作簿中把名称
“
SHEET2
”
,
”
sheet2
”
看成是相同的名称。
8.7
工作表的保护
1.
工作表的保护
Sheets
(工作表名称或工作表
序号)
.Protect
password:=
密码
2.
解除工作表的保护
Sheets
(工作表名称或工作表
序号)
.Unprotect
password:=
密码
第
9
讲
操作单元格转载
2009-02-03 17:35:47
阅读
91
评论
0
字号:大中小
订阅
9.1
选取全部单元格
9.2
选取单元格
Range
表示单个单元格:
Range
(列标
&
行标)
举例:
选取
A1
单元格。
Range
(
)
Range(
Range(“A1”
).Select
2.
Cells
Cells
表示单个单元格:
Cells(
行号,列号
)
Cells(1,1)
Cells(1,1).Select
3. Sheets
某个工作表的单元格
Sheets<
/p>
(工作表名)
.Range(
单元格地址
)
某个工作簿的某个工作表的单元格
4. Workbooks
Workbooks(
工作簿名
).
Sheets
(工作表名)
.Range(
单元格地址
)
14
9.3
选取单元格区域
1.
选取连续单元格区域
选取
A1
:
G10
p>
Range(
Range(Cells(1,1),Cells(1
0,4)).Select
2.
选取不连续的单元格区域
选取
A1
和
B2:F
4
和
G2:H3
Range(
9.4
选取行
1.
选取单行
选取第五行
Range(
Rows(
Rows(5).Select
2.
选取连续多行
< br>选取第
2
行到第
8
行
Range(“2:8”).Select
Rows(“2:8”).Select
选取不连续的多行
选取第
5
行,第
8
~
9
行,第
12
~
18
行
Range(“5:5,8:9,12:18”).Select
9.5
选取列
1.
选取单行
选取第
C
列
Range(“C:C”).Select
Columns(“C:C”).Select
Columns (3).Select
2.
选取连续多列
< br>选取第
C
列到第
H
列
Range(“C:H”).Select
Columns (“C:H”).Select
3.
选取不连续的多列
选取第
C
列,第
E:G
p>
列,第
J
列
Range(“C:C,E:G
,J:J”).Select
9.6
设置单元格内容
语法:单元格
.Value=
常量
给
A1:A10
赋值
R
ange
(“A1:A10”).Value=”MAO”
For I=1 To 10
Cells(I,1)=I
Next I
9.7
设置单元格的计算公式
设置
F3
单元的公式:
Range(“F3”).formula=”=B3*D3”
9.8
清除单元格信息
1.
清除单元格信息
清除
F3
单元的信息:
Range(“F3”).clear
可以清除单元格的格式、内容及批注。
2.
清除单元格格式
Range(“A1”).Clearformats
3.
清除单元格的内容
R
ange(“A1”).ClearContents
15
4.
清除单元格批注
Range(“A1”).Clearcomments
9.9
设置单元格区域格式
Selection
对象
Selection
是全局对象,每进行
Cell
s
或
Range
的
Select
方法就会改变
Selection
对象
Cells(1,1).Select
p>
,
Selection
对象区域就是
A1
Range(
,
Select
对象区域就是
A1:F10
p>
对单元格区域的格式设置,往往通过
Selection
设置
设置
A1:F10
的字体为黑体
Range(
=
黑体
设置边
框
s
(
[
边框
类型
]
)
如
果设置边框的区域是
1
行,则
Bord
ers(xlInsideVertical)
的设置会出错,
如果设置边框的区域是
1
列,则
Borders(xlInsideHorizontal)
的设置会
出错。
一般用一下方法设置边框避免出错:
yle =
xlContinuous
= xlThin
ndex = xlAutomatic
9.10
行列的插入和隐藏
1.
行列插入
Rows(5).Insert
在第五行前插入一行。
Columns(6).Insert
在第六列前插入一列。
2.
行列隐藏
隐藏:
Rows(5).Hidden=Trun
Columns(6). Hidden=Trun
取消隐藏:
Rows(5).Hidden=False
Columns(6). Hidden= False
9.11
单元格查找
<
单元格区域
>.Find
(What
,
[After]
< br>,
[LookIn]
,
[Loo
kAt]
,
[SearchOrder]
,
[SearchDirection]
,
< br>[MatchCase]
,
[MatchByte]
p>
,
[SearchFormat])
参数说明
:
(1)<
单元格区域
>
,必须指定,返回一个
< br>Range
对象。
(2)
p>
参数
What
,必需指定。代表所要查找的
数据,可以为字符串、整数或者其它任何数据类型的数据。对应于“查找与替换”
对话框
中,
“查找内容”文本框中的内容。
(3)
参数
After
,可选。指定开
始查找的位置,即从该位置所在的单元格之后向后或之前向前开始查找
(
也就是说,开始时不查
找该位置所在的单元格,直到
F
ind
方法绕回到该单元格时,才对其内容进行查找
)
。所指定的位置必须是单元格区域中的单
个单元格,如果未指定本参数,
则将从单元格区域的左上角的单元格之后开始进行查找。
(4
)
参数
LookIn
,可选。指定查找
的范围类型,可以为以下常量之一:
xlValues
、
xlFormulas
或者
xlCommen
ts
,默认值为
xlFormulas
。对应于“查找与替换”对话框中,
“查找范围”下拉框中的选项。
(5)
参数
LookAt
,可选。可以为以下常量之一:
XlWhole
或者
xlPart
,用来指定所查找的数据是与单元格内容完
全匹配还是
部分匹配,默认值为
xlPart
< br>。对应于“查找与替换”对话框中,
“单元格匹配”复选框。
(6)
参数
SearchOrd
er
,可选。用来确定如何在单元格区域中进行查找,是以行的方式
(xlByRows)
查找,还是以列的方式
(xlByC
olumns)
查找,默认值为
xlByRows
。对应于“查找与替换”对话框中,
“搜索”下拉框中的选项。
(7)
参数
Search
Direction
,可选。用来确定查找的方向,即是向前查找
(XlPrevious)
还是向后查找
(xlNext)<
/p>
,默认的是向后查找。
(8)
参数
MatchCase
,可选。若该参数值为
True
,则在查找时区分大小写。默认值为
< br>False
。对应于“查找与替换”对话框中,
“区分大
小写”复选框。
(9)
参数
MatchByter
,可选。即是否区分全角或半角,在选择或安装了
双字节语言时使用。若该参数为
True
,则双字节字符
仅与双字节字符相匹配;若该参数为
False
,则双字节字符可匹配与其相同的单字节字符。对应于“查找与替换”对话框中,
“区
分全角
/
半角”复选框。
(10)
参数
SearchFormat
,可选,指定一个确切类型的查找格式。对应于“查找与替换”对话框中,
“格式”按钮。当设置带有
相应格式的查找时,该参数值为
T
rue
。
(11)
< br>在每次使用
Find
方法后,参数
LookIn
、
LookAt
、
p>
SearchOrder
、
MatchBy
te
的设置将保存。如果下次使用本方法时,不改
变或指定这些
参数的值,那么该方法将使用保存的值。
16
在
V
BA
中设置的这些参数将更改“查找与替换”对话框中的设置;同理,更改“查找与替换
”对话框中的设置,也将同时
更改已保存的值。也就是说,在编写好一段代码后,若在代
码中未指定上述参数,可能在初期运行时能满足要求,但若用户
在“查找与替换”对话框
中更改了这些参数,它们将同时反映到程序代码中,当再次运行代码时,运行结果可能会产生差异
或错误。若要避免这个问题,在每次使用时应设置这些参数。
举例:
R
ange(
何菲菲
作用:查找“何菲菲
”所在的行的行号。
第
10
讲
VBA
程序设计转载
2009-02-03 17:39:21
阅读
158
评论
0
字号:大中小
订阅
第
10
讲
VBA
程序设计
10.1
案例
设计的
VBA
程序它是存放在
EXCEL
的工作簿中。
案例:
工作簿名称:工资数据
一个人在单位中,
有一个固定的编号,
这个编号不
随部门的换而变化。人员在部门的变动可以通过序号完成。
序号起两个作
用,第一位是部门号,第二和第三位是顺序号。通过这个顺序号,就能够达到划分部门和人员在部门内的
排序。
10.2
过程程序
1.
创建过程
Sub
过程是一系列由
Sub
和
End
Sub
语句所包含起来的
Visual
Basic
语句,它们会执行动作却不能返回一个值。
Sub
过
程可有参数,例如常数、变量、或是表达式等来调用它。如果一个
Sub
过程没有参数,则它的
Sub
语句必须包含一个空
的圆括号。
创建一个过程需要两个基本步骤。
首
先,
需要向工作簿中添加一个模块。接着需要向模块中添加一个工程。
< br>对于创建的每一
个应用程序,只需添加一次模块。可以使用多个模块,但这是不必
要的。某些开发者喜欢使用多个模块,以便根据他们的目
的或者窗体对过程进行组织。<
/p>
下面举例创建一个过程,它显示一个消息框。
(
1
)打开
一个新工作簿。
(
2
)选择
工具
宏
编辑器
,打开
VBA
编辑器窗口。
(
3
)在<
/p>
`VBA
编辑器的左面,可以看到“工程资源管理器”窗口。在工
程资源管理器窗口的“
Thisworkbook
上单击鼠标右
键,选择“插入”
-
“模块”
,这样就将一个模块添加到应用程序中了。
(
如
果你没有看见“工程资源管理器”窗口,可以按
Ctrl+R)
。
(
4<
/p>
)选择“插入”
“过程”
,显示“添加过
程”对话框。
(
< br>5
)输入“第一个程序”作为过程名字。在“类型”分组框中,确认选择了“子程
序”
。单击“确定”按钮。这样一个新的
过程就添加到模块中了
。可以在模块中看到以
Public Sub
第一个过程()开始,以
End
Sub
结束的语句结构。
VBA
对子程序和函数有如下的命名规则:
名字中可以包含字母数字和下划线。
名字中不能包含空格句号惊叹号,也不能包含字符
@ & $$
#.
名字最
多可以包含
255
个字符。
(
6
)在过
程中插入光标,输入以下语句并回车:
17
在
输入
Msgbox
后,会自动弹出一个消息框告诉你有关这条命
令的信息,称之为自动列表技术。
Public Sub
第一个程序
()
MsgBox
程序
End
Sub
对
Msgbox
的进一步说明:
语法:
MsgBox
(
prompt[, buttons] [, title] [,
helpfile, context]
)
在
MsgBox
函数的语法中,
括号内
的参数是此函数的命名参数。
方括号所包含的参数是选择性的。
在
MsgBox
函数中,
唯一必须提供的参数(
prompt
)是做为提
示的文本。
在代码
中可以利用位置或名称来指定函数与方法的参数。
若利用位置来指定参数,
则必须根据语法中的顺序,
利用逗号
来分隔每一个参
数,例如:
MsgBox
回答正确
!
提示
若以名
称来指定参数,则须使用参数名称或跟着冒号与等号(
:=
)<
/p>
,最后再加上参数值。可以任何的顺序来指定命名参
数,例如:<
/p>
MsgBox Title:=<
/p>
提示
回答正确
<
/p>
函数以及某些方法的语法会利用圆括号将参数封闭起来。
p>
这些函数和方法会返回值,
所以必须用圆括号将参数封闭起来,
p>
才可以赋值给变量。
如果忽略返回值或是没有传递所有的参数,
p>
则可以不用圆括号。
方法若不返回值,则不用将参数用圆括
号封闭起来。
2.
运行过程
创建过程后,可以通过几种方式运行。可以直接使用“运行”
菜单,
“运行子程序
/
用户窗体”工具
栏按钮或按下
F5
键。
按
F5
后,
选择要运行的过程:
运行结果:
3.
保存对模块所做的改变
p>
要保存新过程
,
需要保存过程所驻留的工作
簿。可以用
VBA
编辑器保存工作簿。具体步骤如下
:
选择
文件
保存
。则工作簿和模块与过程都保存下来了。
10.3
变量的应用
1.
用
Dim
语句声明变量
声明变量可以使用
Dim
语句
,
基本语法如下
:
Dim
变量名
AS
数据类型
p>
条语法中的变量名代表将要声明的变量名。对变量的命名规则和对过程的命名规则相同。
p>
变量名必须以字母开始
,
并且只能包含字母数字
和特定的特殊字符
,
不能包含空格、
句
号惊叹号
,
也不能包含字符
@ & $$
#
。
名字最大长度为
255
个字符
举例:输入一个信息,然后显示出来。具体步骤如下
:
p>
(
1
)创建一个名为
显示信息
的子程序。
(
2
)输入以下代码
:
18
Public Sub
显示信息
()
Dim M_msg As
String
M_msg =
InputBox(
请输入信息
:
MsgBox
你输入的信息是:
End Sub
(
3)
按下
F5
键运行过程。<
/p>
4)
输入“
会计电算化”后按回车键(输入其他内容也可)
,
会显示一个消
息框。
在
Dim
语句中如果如果没有数据类型
,
变量将被定义为
Variant
p>
类型
,
因为
VBA
中默认的数据类型是
Variant
。
Variant
数
据类型占用存储空间
较大,而且它将影响程序的性能,因此应当在程序中确定变量的类型。
2.
作用域
变量可以在两个地方定义常量和变
量
:
过程中定义和在模块顶部一个名为
通用声明
的区域内定义。而且定义的位
置就
决定了作用域。
在过程
中声明
,
该变量只能在该过程中使用
,
其他过程中不能使用这个变量和常量
,
这种变量为局部变量或过程级变量。
在
模块顶部声明的变量称为
模块级变量,该变量在该模块的所有过程中都可以使用。
公共级
变量可以在应用程序的任何过程中使用,
不论过程和变量是否定义在一个模块。
这就使得公共级变量在使用中十
分灵活,但是公共级变量在程序运行时一
直保留在内存中,这样就占用了系统资源。要创建公共级变量,可以用
Public
p>
语
句,具体语法如下:
Public variablename As datatype
要创建公共级常量,具体语法如下:
Public const CONSTANAME datatype =
value
公共级变量或常量必须在模块顶部的“通用声明”区域中定义。
举例:
Public M_dm As Characters
Public M_name As Characters
3.
声明数组
数组的声明方式和其他的变量是一样的,
它可以使用
Dim
、
Static
、
Private
或
Public
< br>语句来声明。
标量变量
(非数组)
与数组变量的不同在于通常必须指定数组的大小。
若数组的大小被指定的话,
则它是个固定大小数组。
若程序运行时数组的
大
小可以被改变,则它是个动态数组。
数组是否从
0
或
1
索引是根据
Option Base
语句的设置。如果
Option
Base
没有指定为
1
,则数组索引
从
0
开始。
(1)
声明固定大小的数组
下面这行代码声明了一个固定大小的数组,它是个
21
行乘以
21
列的
Integer
数组:
Dim
M_Array
(
20,
20
)
As Integer
第一个参数代表的是行;而第二个参数代表的是列。
与其他变量的声明一样,除非指定一个数据类型给数组,否则
声明数组中元素的数据类型为
Variant
。数组中每个数组的数
字型
Variant
元素占用
16
个字节
,
每个字符串型
Variant
元素占用
22
个字节。
(2)
声明动态数组
19
p>
若声明为动态数组,则可以在执行代码时改变数组大小。可以利用
Static
、
Dim
、
Private
或
Public
语句来声明数组,
并使
括号内为空,如下示例所示。
Dim
M_Array
()
As
Single
可以在过程中使用
ReDim
语句来做隐含性的数组声明。
对于过程中的数组范围,可以使用
ReDim
语句去改变它的维数。然而当执行这个命令时,数
组中存在的值会丢失。若
要保存数组中原先的值,
则可以使用<
/p>
ReDim Preserve
语句
来扩充数组。
例如,
下列的语句将
XArray
数组扩充了
5
个元素,
而原本数组中的当前值并没有消失掉。
ReDim Preserve XArray
(
UBound
(
XArr
ay
)
+
5
)
10.4
控件的应用
1.
向工作表添加控件
p>
用
EXCEL
设计界面时
< br>,
要将控件添加到工作表上
,
可
以按以下步骤操作
:
(
1)
选择工具下的“自定义”
,
< br>显示
窗体
工具栏。
(
2
)选择
标签
控件。<
/p>
(
3
)将鼠标定位到某单元格
,
此时鼠标变成小十字。
(
4
p>
)按下左键
,
拖动鼠标,确定控件的大小<
/p>
,
放开鼠标左键。
(
p>
5
)在“标签
1
”
上单击右键
,
选择
编辑文字
现在可以输入文字。完成后
,
单击任何单元格退出文字编辑。
(
6
p>
)通过以上步骤可以添加其它所需要的控件到工作表中。
2.
设置控件的特性
p>
每个控件都有一系列的特性,需要进行设置来满足不同的需要。设置控件的特性
,
可以在该控件上按右键完成。
3.
给控件命名
p>
当创建一个控件时,
EXCEL
会自动给它
指定一个默认的名字
,
但不便于理解和记忆。
< br>更改控件的名字,
先选中某个控件
,
再在位于公式栏上的
名字
编辑框输入控件名字。这样就给控件更改了名字。
4.
使用用户窗体
p>
要创建功能复杂的应用程序
,
并且方便用户
输入数据
,
那么应该使用用户窗体。用户窗体可以作为程序的对
话框和窗口。
向用户窗体添加控件基本类似于向工作表添加控件
,
然而第一步要创建一个用户窗体。
这可以通过
VBA
编辑器实现。
具体按
以
下步骤操作
:
(
1
)打开
工作簿
,
选择
工具
宏
编辑器
打开
VBA
编
辑器。
(
2
)在
VB
A
编辑器中选择工具栏上的
插入用户窗
体
按钮或者选择
插入
菜单
,
从下拉菜单中选择
用户窗体
。
在
VBA
编辑器中出现一个名为
的窗体
,
控件工具箱
同时出现
,
在其中有部分新的
控件。
这些新的控件是
:
①切换按钮
:
该控件如果被选中
,
那么会保持被
按下的状态。
如果再次单击它就恢复为没有按下的状态。
EXC
EL
工具栏中
有几个这样的按钮
,
p>
例如
:
全屏显示
<
/p>
加粗
下划线
p>
以及
窗体
工具栏中的
切换网格
<
/p>
等。
②选项卡条
(TabStrip):
它是包含多个选项卡的控件。通常用来对相关的信息进行组织或分类。例如
:
用选项卡条来显示各
个地区的销售信息
,
可以给每个地区设置一个选项卡。在默认时
,<
/p>
选项卡包含两页
,
分别叫做
TAB1
和
TAB2,
可以
添加更多的选
项卡。
20
③多页
:
外
观类似选项卡条
,
是包含一页或多页的控件。
< br>选项卡条给人相似的外观
,
而多页控件的各页包含各自不
同的控件
,
有各自不同的布局。多页的例子很多
,
例如
:
设置控件格式
对话框和
工具
菜单中的
选项
对话框。以及
格式<
/p>
菜单中的
单
p>
元格
...
对话框。
④
图像控件
:
它允许向窗体上放置图片。图片格式须为
:*.bmp
,
*.c
ur
,
*.gif
,
< br>*.ico
,
*.jpg,*.wmf
< br>。
⑤
RefEdit:
它外观象文本框,通过这个控件可以将用户窗体折叠起来,以便选择单元格区域。
在用户窗体设计过程
中可以对其
进行预览,方法是在
VBA
编辑器中选择该窗体,单击“运行”
菜单中的三角符号“运行子过程
/
用户窗体”
< br>,运
行窗体的另一种方法是按
F5
键
10.5 EXCEL VBA
代码结构
1.
对象、属性和方法
(
1
)面向
对象概述
①面向对象方法的产生
在面向对象的方法之前,程序设计所采用的是面向过程的方法。面向过程的程序设计的一般思路是: 自顶向下,逐步求精;
把程序结构按功能分成若干个基本的模块,
这些模块之间尽量相对独立,
功能尽可能单一,每一个模块都是由顺序、
选择和
循环三种结构组成,模块化的方法的具体实现是使用子程序。
由于这种结构化的程序设计的方法使用了模
块分解的方法,
有效地把一个复杂的程序抽象成一些简单的易于控制和处理的子
程序,使设计便于管理和维护。
由于用户图形界面的广泛使用,
软件的规模也越来越大,要求也越来越高,
使软件的开发越来越困难。
为了适应软件开发的
发展,在
80
年代中期提出了面向对象的概念。面向对象的方法的中心思想是:
像真实的世界由真实的物体组成一样,软件
的程序设计也可看成由一系列单独的对象组成
,
每一个对象都有自已的特定的特征和行为。
软件开发从本质上
讲,
就是对软
件所要处理的问题做出正确的认识,并把这种认识
表述出来。
所谓面向对象的方法,
就是将数据和对数据的操作放在一起,组成一个相互依存、不可分开的整体——对象。
面向对象的程序设计方法之所以能受到如此广泛的欢迎,
p>
其中的一个很重要的原因就是可以使软件设计者通过可执行代码的
共
享使程序创建更容易。不用为每一个方法保留一个单独的拷贝,相同的
VBA
对象类型能够共享它们的方法的代码。
②对象
一
个对象可以是一个真实存在的物体,
也可以是一个抽象的事件,但不管它是真实物体也好
,抽象事件也好,
它总是可以用
静态特征和动态特征来描述。<
/p>
所谓静态特征,
就是物体的颜色、
大小等
可以用某种具体的数据来描述的特征;
所谓动态特征,
就是物体
所能表现出来的行为和所具有的功能等特征。
与真实物体类似,
在程序设计中所用到的对象的概念,
也可以由静态特征和动态特征来表现。
在这里静态特征称为属性,
动
态特征称为方法。这些属性和方法在一起就定义了一个对象。对象是系统中用来描
述事物的一个基本单位。
面向对象
的程序设计方法将数据和程序封装到封闭的对象中,
这样就使设计、
组织和使用这些复杂的数据结构和由那些数据
所完成的功能变得很简单。
软件应用程序中的每一个对象都包含了程序代码和数据,
并合成了一个简单
的项。
大部分应用程
序中都包含了很多种不同类型的对象。
p>
VBA
中提供
了访问其它应用程序和其它应用程序中的对象的方法。
要使
VB
A
获得对主应用程序的过程的控制,
就要用
VBA
代码操纵主应用程序中的对象。使用类模块,甚至可以创建自已的对象。
p>
例如,在
Ex
cel
中,工作簿、工作表、数据区域、图表、图形、工具栏、菜单等都是对象。通过对
这些对象的使用就可以实
现对
Excel
的操作。
③属性
属
性就是对象的静态特征。例如,一个人,要描述他,总是通过如高矮、胖瘦、美丑等一系列特征来进行。所有这些
特征就
可以认为是对象的属性。
<
/p>
属性决定了一个对象的外观和行为,
要改变一个对象的外观和行为
,
可以直接通过改变对象的属性来实现。
要改变一个
Excel
对象的外观和行为,
可以通过对属性的
赋值来实现。我们要想让工作表变得好看一些,
就可以改变它的颜色属性,
要想让字
体变大一些,就可以改变它的
Font
p>
属性。
21
通过属性不仅能改变对象的行为,
还能查看对象当前的状态。例如要想知道工作表的名称,可以直接访问它的
Name
p>
属性,
要想知道工作簿的存储路径、文件夹和名称,则可以访问它的
FullName
属性。
对象都有属性,用来描述或设置对象的特征。可以使用
VBA
来设置对象的属性,也可以对一个对象的某些属性进行修改,<
/p>
从而定义该对象,还可以引用某对象的属性值。使用属性时,应将对象和属性组合在一起,
中间用句点分隔。
语法:
<
对象
>.<
属性
>
<
参数
>
p>
说明:
设置或引用某对象的属性。
若该属性
带有参数或需要为带参数的属性指定参数时,
则指定参数以进一步描述该对
象;若该参数返回值,则应在参数两边加上括号。
p>
语法:
<
变量
>=
<
对象
>.<
属性
>
说明:将某对象的属性值赋值给一
个变量,以便于在程序中使用。
例
如,
Range
对象有一个
Value
属性,可以用
VBA
代码引用该对象的
属性值,也可以修改该属性
④方法
现
实的物体几乎都有一些内在的行为和功能。例如,人可以从事工作、消费,汽车可以用来运输,房子可以用来住,
等等。
方法可以改变对象的属性值,方法也可以对储存在对象中的数据实施某些操作。方
法很象
VBA
编程中的过程,但它属于某
个对象,必须通过特定的对象才能访问方法。
虽然相同类型的对象能够共享它们的方法代码,但是当用户访问某个特定的对象时,该方法只能作用 于调用该方法的对象。
对象都有方
法,
一个方法就是在对象上执行的某个动作。
为对象指定方法时
,
应将对象和方法组合在一起,
中间用句点分隔。
语法:
<
对象
>.<
方法
>
<
参数
>
p>
说明:
为某对象指定方法。
若该方法带有参
数或需要为带参数的方法指定参数时,
则指定参数以执行进一步的动作;
若
该参数返回值,则应在参数两边加上括号。
⑤类
<
/p>
面向对象方法中的类,
是具有相同的属性和方法的一组对象的集合
。
它为属于该类的全部对象提供了抽象的描述,
其内部包
括属性和方法两个主要部分。类与对象的关系犹如模具与铸件的关系一样。一个属于某个类的对
象称为该类的一个实例。
实际上整
个
VBA
的对象体现是一个分层结构。对象分层结构的概念意味
着对象可以包含其它对象,而其它对象又可以包含
别的对象。这种“包含”是通过一种名
叫“集合”的特殊类型的对象来实现的。集合对象的唯一目的是用来包含其它对象。
被给
定集合所包含的对象都是同一类型的。
(
2
)对象的引用
既然已经有了对象的定义,
我们就可
以使用这些已有的对象来完成一些实际的任务。
但是,
在使用对
象之前,必须要作的事
情是:要让
Excel
< br>知道现在用的是一个对象,而且需要明确这个对象是属于哪一个类,这个对象具体值是什么。
使用对象首先要定义:这是一个属于某个类的对
象,然后再给它赋一个具体的值。
给对象变量赋值的语句和给普通变量赋值的语句不同。
给普通变量赋值的语句只要直接用
一个等号就可以了,
而给一个对象
变量赋值则需要用到
Set
关键字。
<
/p>
Excel
的对象模型是通过层次结构很有逻辑地组织在一起的,
一个对象可以是其它对象的容器,可以包含其它的对象,而这
些对象又包含其它的对象。
位于顶层的是
Application
对象,也就是
Excel
应用程序本身,它包含
Excel
p>
中的其它的对象,如
Workbook
对象
;一个
Workbook
对象包含其它一些对象,如
Worksheet
对象;而一个
Workshe
et
对象又可以包含其它对象,
如
Ra
nge
对象,等等。这就是
Excel
的对象模型。
例如,
Range
对象在
Excel
对象模型中的位置为:
Application
对象
Workbook
对象
22
-
-
-
-
-
-
-
-
-
上一篇:大数据可视化分析平台介绍
下一篇:避免缩水设计