WORDVBA编程从零开始学VBA.docx

上传人:b****8 文档编号:9217678 上传时间:2023-05-17 格式:DOCX 页数:48 大小:778.36KB
下载 相关 举报
WORDVBA编程从零开始学VBA.docx_第1页
第1页 / 共48页
WORDVBA编程从零开始学VBA.docx_第2页
第2页 / 共48页
WORDVBA编程从零开始学VBA.docx_第3页
第3页 / 共48页
WORDVBA编程从零开始学VBA.docx_第4页
第4页 / 共48页
WORDVBA编程从零开始学VBA.docx_第5页
第5页 / 共48页
WORDVBA编程从零开始学VBA.docx_第6页
第6页 / 共48页
WORDVBA编程从零开始学VBA.docx_第7页
第7页 / 共48页
WORDVBA编程从零开始学VBA.docx_第8页
第8页 / 共48页
WORDVBA编程从零开始学VBA.docx_第9页
第9页 / 共48页
WORDVBA编程从零开始学VBA.docx_第10页
第10页 / 共48页
WORDVBA编程从零开始学VBA.docx_第11页
第11页 / 共48页
WORDVBA编程从零开始学VBA.docx_第12页
第12页 / 共48页
WORDVBA编程从零开始学VBA.docx_第13页
第13页 / 共48页
WORDVBA编程从零开始学VBA.docx_第14页
第14页 / 共48页
WORDVBA编程从零开始学VBA.docx_第15页
第15页 / 共48页
WORDVBA编程从零开始学VBA.docx_第16页
第16页 / 共48页
WORDVBA编程从零开始学VBA.docx_第17页
第17页 / 共48页
WORDVBA编程从零开始学VBA.docx_第18页
第18页 / 共48页
WORDVBA编程从零开始学VBA.docx_第19页
第19页 / 共48页
WORDVBA编程从零开始学VBA.docx_第20页
第20页 / 共48页
亲,该文档总共48页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

WORDVBA编程从零开始学VBA.docx

《WORDVBA编程从零开始学VBA.docx》由会员分享,可在线阅读,更多相关《WORDVBA编程从零开始学VBA.docx(48页珍藏版)》请在冰点文库上搜索。

WORDVBA编程从零开始学VBA.docx

WORDVBA编程从零开始学VBA

从零开始,步入Word宏编程的世界(第一讲)

工作中,经常看到许多朋友在使用Office时已经非常地熟练,但仍不敢去接触Office的VBA编程;在网上Office的VBA编程论坛中,同样看到有朋友在其中流连了相当长的时间,但仍然不得其门而入。

问一下这两类朋友,前者觉得编程是一件很“高深”的事,自己恐怕学不会;后者为了提高自己的工作效率,虽然很想学,但自己一点编程的基础也没有,照着网上高手们的帖子做,反而越学越糊涂。

当我问第二类朋友为什么不多看看VBA的帮助文件时,“看不大懂,就像有语言障碍一样。

”他这样回答我。

对于第一类朋友,我想说,不要被自己想象出来的“困难”吓倒,如果您没有亲自尝试过,怎么知道编程会很“高深”,又怎么知道自己学不会?

而第二类朋友如果能静下心来把基础知识补一补,相信您的问题也会迎刃而解。

那么,就让我们从最基础的知识开始,步入Office宏编程的世界吧。

文前的几点说明:

1、虽说本文用到的程序在office2007与office2010中同样可以正常运行,但考虑到目前单位办公用机的实际情况,本文所有的实例主要还是面向Office2003的用户;

2、为了便于各位读者理清思路,避免文章涉及面太广,本文主要以office2003中最常用的Word为主进行讲述,有与其它Office套件相关联的地方,将单独说明;

3、为避免学习过程中的枯燥乏味,本文没有像传统编程教材那样以理论知识为线索展开,而是将不同的知识点放到了几个不同的实例之中进行讲述。

所以,把每个实例“做”一遍,细心体会每个实例的知识点,将有助于您快速掌握VBA的编程技术;单纯地“看”,则无助于您的学习。

本文的宗旨是一一完全面向初学者!

或许您还能以此为契机叩开奔向VB6.0或VB.NET的大门,说不

定您还能编出一、两个病毒玩玩儿(当然仅限于玩玩儿,千万别做出什么傻事来!

)!

好了,下面就开始我们Word的VBA编程之旅吧,愿您旅途愉快!

实例一:

“你好,世界!

知识点:

1、熟悉VBE的编程界面;

2、什么是VB、VBE、VBA;

3、什么是过程、工程。

不要以为这些知识点有多难,让我们一步一步地来。

启动Word,指向工具一一宏一一VB编辑器,打开VB编辑器的界面,如图1-1。

“VB编辑器”就是VBE,VBE是VisualBasicEditing的缩写。

我们在VBE编程环境中所使用的编程

语言就是"VBA”,即VisualBasicforApplications的缩写,VBA语言是我们所熟知的VB编程语言的一个

子集。

VBE编辑器界面的菜单栏与工具栏就不必说了。

界面左面中间部份是“工程资源管理器”所在的“工程

资源管理区”,每一篇Word文档中所编写的程序,Word都把它看成为一个“工程”,“工程资源管理器”就

是对这些工程进行管理的地方;界面左下方是“对像属性设置区”,我们可以对自己要用到的对像的属性进行

设置,第四个实例中,我们将对“属性设置”进行详细解说,现在大家不必管它;界面右面大面积空白的区域是“代码编辑区”,我们编写的所有代码都放在这儿。

如果看不到这个空白区域,则打开“插入”菜单,插

入一个“模块”就行了。

如果“工程资源管理器”已有“模块”,则双击模块名,就能打开“代码编辑区”

好,现在我们就在这个VBE环境下,利用VBA语言,来编写我们的第一个工程(即程序)。

请在“代码编辑区”中输入如下的代码:

subA()

msgbox(“你好,世界!

”)

endsub

注意,代码“msgbox("你好,世界!

")”一句中的引号与括号为英文标点。

点击工具栏上的黑色三角形的

“播放键”,或按下F5键运行这个程序,您将看到一个弹出的消息框。

如图1-2。

 

代码解说:

sub是VB编程中申明一个过程的语句,subA()申明了一个名叫A的过程,A后面跟了一个括号,它的作用现在大家暂时不用管它。

整段程序结尾的endsub语句,表示过程“A”在此结束。

每一个程序都必

需有开始与结束的标志,所以,从SubA()到Endsub就构成了一个完整的“过程”。

Msgbox是一个函数,它的作用是弹出一个消息框来,它后面括号中的内容就是要在弹出的消息框中显

示的内容。

该函数在我们的第二个实例中,将做详细讲解。

本实例的知识扩展:

1、打开Word,指向工具一一宏,再点击“宏”按钮,打开“宏名”对话框。

这时,我们就可以看到刚才我们编写的名叫“A”的宏。

选中“A”,点击“运行”按钮,就能运行该宏。

B”(注意没有引号),再点击

2、同上操作顺序,打开“宏名”对话框,在“宏名”中新输入一个名字

“创建”按钮,这时就会打开VBE编辑器,并已为我们生成了一个名为“B”的空过程。

该过程中的绿色文

字,就是这个宏的注释。

(如果我们要对自己所编写的代码进行注释,可在注释语句的前面加上一个英文状态下的撇号,该注释的语言是不会被程序运行的。

)用这个方法创建过程,可以避免手工输入时疏忽掉程序结尾的Endsub。

好了,实例一到此结束,回顾一下课前的知识点,都掌握了吗?

如果觉得没有问题了,就准备进入我们的第二个实例吧。

从零开始,步入Word宏编程的世界(第二讲)

实例二:

基本的对话框函数

知识点:

1、认识消息框函数MxgBox与输入框函数InputBox;

2、什么是常量、什么是变量、申明变量的方法是什么;

3、用“&”符号连接字符串。

想想我们平时与他人谈话时的形式——你提问,他回答;或是他提问,你回答。

我们所编写的程序,在与计算机进行交互的过程中,其形式也是这样的一问一答。

所以,几乎所有的编程语言都提供有直接与计算机进行对话的函数,在VBA中,这样的最基本的函数是消息函数“MsgBox”与输入框函数“InputBox请输入以下代码并运行:

'''======还有待完善的程序一=====

subB()

 

DimX

X=inputbox("您的姓名是:

”)。

Msgbox("欢迎您”&X&”朋友!

”)

EndSub

注意:

1、在输入“Msgbox("欢迎您"&X&”朋友!

”)”这行代码时,括号内几个字符串之间有空格,没有输入空格的话会出错,出错时,代码将以红色显示。

2、本程序运行时如果点“取消”按钮,其实会出现问题,关于对这个问题的解决方法,将在后面讨论。

所以,我们先称本程序为“还有待完善的程序”。

(朋友们可以先试一下,看看会出现什么问题?

)。

运行效果如图2-1与图2-2。

看到了吗?

这就是最简单的与计算机进行对话的效果。

代码解说:

从SubB()到Endsub就是一个完整的过程——“B”。

“InputBox("您的姓名是:

")”这句代码是显示一个“输入框”,请您输入自己的姓名。

这句代码事实上就是一个计算机提问,人回答的“对话”过程。

其中,“InputBox”函数的作用就是弹出一个输入框,等待我

们回答计算机的提问。

当然,我们在回答计算机时,可能填的是“老王”也可能填的是“老李”……,这个答案本身是不固定的,所以,我们将这个答案的值赋予“变量”一一“X”。

这下,大家可能就知道“变量”的含意了吧?

在程序运行中,我们经常会遇到值不能确定,或者是可能会发生改变的某个数据,在这个时候,我们就用一个“符号”来“代替”这个可能会变化的值,这个用来代替不能确定的值的“符号”,就是“变量”。

文档

现在,我们删去本程序中的“DimX”这句后,再运行一下试试效果。

怎么样,是不是感觉不到区别?

(如果程序报错说“没有申明变量”的话,没有关系,请接着看下面的内容。

)在VBA语言中允许我们不申明变量就直接运用它,所以程序仍然能够正常运行。

“DimX”这句代码中的“Dim”就是申明变量的函数,“DimX”就是申明了一个名叫“X”的变量。

在“X=inputbox("您的姓名是:

”)”这句代码中,我们利用等号,将输入框中取得的值赋予给了变量“X”。

虽说我们不申明变量就可以使用它,但这绝对不是个好的习惯。

首先,在一些代码较长的程序中,您能保证那些名字较长的变量在后面用到时,您不会输错吗?

其次,自己不申明变量,时间久了,那些较长的程序可能会连您自己也看不懂;另外,程序在访问申明过的变量时,速度会比访问没有申明过的变量要快一些。

为了避免我们使用变量时出错,我们可以在VBE编辑器菜单的工具一一选项一一编辑器选项卡上,选中“要

求申明变量”(见下面图2-3、2-4),这样VBE会自动在我们每一个工程的前面加上一句“OptionExplicit”,

这句代码将检查我们所要使用的变量是否申明,没有申明的话就会中止程序的运行。

做了上述的操作后,我们再运行去掉“DimX”语句的过程,程序就会报“没有申明变量”的错误。

关于变量,还有一些其它的知识,我们将在实例三中进行更深一步的学习,现在就到这吧。

“Msgbox("欢迎您"&X&”朋友!

”)”这句中的“msgBox”函数,大家已不陌生,它的作用就是弹

出一个消息框来(在本程序中,这个消息框就是计算机对我们输入姓名后的回答。

)。

在这个消息框所显示的文字中包含了三个部分。

字符串“欢迎您”、字符串“朋友!

”和变量“X”所可

能对应的字符串“老王、老李……”等。

在VBA语言中,我们使用“&”符号来连接字符串,所以我们在程

序运行最后,看到的是一个像图2-2那样完整的欢迎语句。

VBA语言中,在使用“&”连接符号时,请一定

注意字符串与字符串之间有一个空格,否则程序一定会出错。

由于MsgBox函数与InputBox函数是两个非常常用的对话函数,所以,我们再对它进行更深一步的学习。

使用MsgBox函数时的标准格式:

变量=MsgBox(”要显示在这儿的语句”,按钮的参数,”消息框的题目”)

例子:

YMsgBox(”欢迎您”&X&”朋友!

”,0,”这里是欢迎对话框”)

请注意格式中英文状态下的引号、逗号与空格的使用。

使用InputBox函数时的标准格式:

变量=1nputBox("要显示的提示文本”,”输入框的题目”,”输入框中默认显示的语句”)

例子:

X=InputBox(“请输入您的姓名”,”这里是输入对话框”,”您的姓名请输入到这儿。

”)。

根据上面的格式,请修改本实例的程序代码为:

'''======还有待完善的程序二=====

SubB()

DimX

DimY

X=inputbox("您的姓名是:

",”姓名输入框”,”您的姓名请输入到这儿。

”)

Y=Msgbox("欢迎您"&X&”朋友!

",0,”这里是欢迎对话框.”)

EndSub

函数的

本段程序应该很容易读懂吧?

运行一下,看看与前面程序的区别在什么地方?

再分别把MsgBox

参数0替换为0、1、2、3、4、5这几个参数并运行,看看又有什么不同?

怎么样,对话框中给出的提示是

姓名输入框

 

图2-2对比一下,看看到底哪些地方有了变化?

)。

程序写到这么详细,您是否已经觉得它已经很完善了呢?

那么,在当程序要求您输入您的姓名时,如果您选择了“取消”,会有什么现象呢?

对,“取消”按钮同样会向程序返回一个值。

为了使用函数时更灵活一些,VBA将这些返回的值“固定”为以下的数值,这些在程序中被固定的值,就是“常数”。

MsgBox函数的常数如下:

“确定”按钮被单击时,返回“1”;“取消”按钮被单击时,返回“2”;“终止”按钮被单击时,返回“3”;“重试”按钮被单击时,返回“4”;“忽略”按钮被单击时,返回“5”;“是”按钮被单击时,返回“6”;“否”按钮被单击时,返回“7”。

InputBox函数在使用过程中,当人们输入了值的时候,选择“确定”或按下回车键,则返回输入框中的内容,输入框中的内容显示不是“固定”的,也就是说它不是常数;但是,如果人们在要求输入之时选择的是“取消”按钮,则会返回一个值,这个值是“空值”,注意“空值”并不是“零”。

所以,InputBox函数只有一个常数——“空”。

下面,我们用:

如果(If)、那么(Then)、否则(else)、结束(endif)判断语句来完善我们今天的实例。

关于“If”判断语句,不是本实例的学习重点,下节课我们将会详细介绍它。

代码中必要的地方已添加了注释(还记得为代码添加注释的方法吗?

)。

完善后的B程序===============

SubB()

DimX

DimY

X=InputBox("

您的姓名是:

","姓名输入框","您的姓名请输入到这儿。

")

IfX<>""Then

'如果X的值不为“空”,那么

Y=MsgBox("

欢迎您"&X&"朋友!

",0,"这里是欢迎对话框.")

Else'否则(即,

X的值为“空”)

EndIf'结束

EndSub

代码“IfX<>""Then”中的“<>”是大于与小于符号,表示“不等于”的意思。

分别运行本程序与最前面的程序,并选择“取消”,对比一下运行的效果,从完善后的程序中——想必您不难看出“常数”在程序中的作用了吧?

请再多体会体会这本实例中的这几个例子,您对MsgBox与InputBox这两个函数的熟悉程度,将直接影响您后面的学习。

加点油吧。

本实例的知识扩展:

1、请将本课中学到的MsgBox函数的参数分别运用到实例一中,看看效果如何。

2、请思考:

哪些情况下,会使用到MsgBox函数的不同返回的值?

好了,实例二到此结束,请再回顾一遍本实例的知识点,您都掌握了吗?

是不是觉得VBA并不像想象中那么困难?

如果您确信已完全掌握了前面这两课的内容,那么,准备接受实例三的挑战吧!

 

从零开始,步入Word宏编程的世界(第三讲)

实例三:

“猜数游戏”

知识点:

1、学习变量的类型与转换;

2、掌握程序的循环与判断;

3、学习随机数的生成。

通过对前面两个实例的学习,相信您对自己掌握VBA编程已充满了信心。

今天,我们将编写一个小小的游

戏程序。

这个游戏程序中既包含了新的知识点,又要考验您对前两课知识运用的熟练程度,就让我们静下心来克服这个小难关吧。

游戏内容是这样的:

电脑生成一个0到99之间的整数,请您来猜这个数是多少,每猜一次,电脑都给您

一个提示,直到您猜中为止。

程序思路:

1、电脑首先生成一个0到99之间的整数;

2、请您输入您所猜的数;

MicrosoftWord

-dicrosoftWord

删了4决!

3、把您输入的数与电脑所生成的数进行比较,并给出“您猜大了”或“您猜小了”的提示;

4、如果您猜对了,则退出程序;如果您没有猜对,则循环回第二步重复运行,让您再次输入自己所猜的数。

请看代码,必要的地方已添加了注释。

程序中退格与对齐是为了便于理解。

请您先试着自己把代码读一读,看看能不能读懂。

''=========程序名“您猜”=========

Sub您猜()

Dima,b,c,d'申明了四个变量,变量间用英文逗号分开,与前面实例二申明变量的写法不同,结果相同。

a=0'这个变量用于计算您猜了多少次。

Randomize'准备生成一个随机的数字,先初始化随机数生成器。

b=Int(100*Rnd)'生成一个百以内的随机数,“Rnd”就是“随机数生成函数”。

Do'开始循环

a=a+1'您猜的次数增添一次。

当再次循环到这儿时,次数会继续往上加。

c=InputBox("请输入您所猜的数”)’将取得的值赋予变量“c”,“c”是字符串!

d=Clnt(c)'将变量“c”转化为整数,再将值赋给“d”。

Ifb

MsgBox("您猜的数大了")'显示比较的结果。

ElseIfb>dThen'进行比较,如果猜小了。

MsgBox("您猜的数小了")'显示比较的结果。

Else:

b=d'进行比较,如果猜对了。

MsgBox("哈哈,您猜对了!

")'显示比较的结果。

ExitDo'既然已经猜对了,就跳出循环。

EndIf'结束比较。

Loop'回到前面的Do,继续循环。

MsgBox("您猜了"&a&"次!

")'弹出消息框,并使用了字符串连接。

EndSub'结束程序。

运行本程序,看看效果。

并根据注释,体会循环与判断在本程序中的作用。

代码解说:

a这个变量,用于计算您所猜的次数。

每多猜一次,它就在自身的基础上加1,其相应的代码是:

a=0

与a=a+1两句。

程序结尾时,将在消息框中显示“a”的值。

b这个变量,用于记录一个随机生成的数字。

其相应代码为:

Randomize与b=Int(100*Rnd)这两句。

其中,Randomize这个语句在本程序中非常重要,如果您去掉这个函数,再多运行本程序几次的话,您就会发现猜测的答案居然是有规律的!

换句话说,只要我知道了电脑所出数字的规律我就可以“百发百中”地一次猜中这个数!

所谓“随机数”顾名思义就应该是“随机”产生的数,在没有Randomize语句的情况下,这些产生的数看似很“随机”,其实有规律,这种随机数就是“伪”随机数。

所以,Randomize语句的作用就是生成“真正”的随机数。

Rnd函数是生成一个介于0与1之间的小数,乘以100是让这个小数成为一个介于0到100之间的数;Int函数的作用是将一个数的小数部分去掉,只保留它的整数部分,即“取整”。

通过这样一个可能大家觉得有点复杂的过程,我们得到了一个0到99之间的整数(大于99而小于100的小数在取整后即是99,所以前面我们说“乘以100是为了生成一个介于0到100之间的数”,而真正取整之后最大的数只能是99。

),并将它的值赋予了变量“b”。

生成随机数,是很多程序中要用到的功能(特别是游戏,比如游戏中随机生成不同的怪物或不同的宝物等。

),上面的内容希望大家能悉心地体会。

c这个变量,是取得输入框中我们所猜测的数字。

其相应代码是“c=InputBox("请输入您所猜的数")”,但计算机并不认为我们所输入的是一个数字(整数),它把我们输入的内容看成是文字(字符串)。

显然,文字是没有办法去与数字比较大小的,所以,我们要用到变量d。

d这个变量,是一个整数。

它是利用了“转换函数”——“CInt”,将我们所取得的字符串变量“c”转

换成了一个整数。

其相应代码是“d=Clnt(c)”。

也就是说,本程序中最终进行比较的,是两个整数“b”与

“d”。

这里涉及到VBA数据类型的知识。

对于VBA的数据类型,这里主要为大家介绍两种:

lnteger——包含-32,768到32,767之间的整数。

该类型的数值基本上可以满足我们通常使用整数时的需

要;

String——包含变长字符串,最大长度可为20亿个字符。

该类型的值其实就是我们常用的字符串。

我们在程序当中用的Clnt函数,就是将一个String类型(字符)的值,转换成了一个lnteger类型(整数)的值。

所以我们称Clnt函数为“转换函数”。

与Clnt类似的常用转换函数还有:

Clin、CSng、CStr等。

可以把VBA帮助文件中的“转换函数”与“数据类型”相互参照进行学习。

(相信这个时候您看帮助文件中的这部分内容,将不会再是一件难事。

感觉到困难了吗?

如果感觉到了困难,就请将上面的内容再体会体会。

准备进入下一个知识点。

程序中的DO、ExitDo以及Loop为一个整体。

其中,Do是开始进入循环;Loop是指回到Do语句处,再次进行循环;ExitDo是指当符合某一个条件时就直接退出循环。

在本程序中,ExitDo是指当猜中了(即b=d)时,退出循环;而无论是猜大了(b>d),还是猜小了(b程序中数字的比较,是利用lf语句来实现的。

在实例二中,我们已接触过lf语句,lf语句的基本格式是:

If(条件)Then(结果)EndIf'(结束If判断语句)

在lf语句判断的过程当中,还可以有子判断语句:

Elseifthen。

对于一个具有多重判断的语句,我们大致可以这样理解:

如果(If),那么(Then),否则(Elseif),那么(Then),

再否则(Elseif),那么(Then)……(Elseif根据情况可以套嵌很多层)最终(Else),结束判断(EndIf)。

本实例的知识扩展:

1、试一试自己在程序结尾处再添几句,判断所猜的次数:

如果小于六次,给出一个评价“优”;等于六

次,给出一个评价“良”;大于六次,给出一个评价“您还需努力!

”。

2、试一试给程序补充部分内容,其功能为:

在猜完一次后,询问游戏人“您还愿意再玩一次吗?

”,并根据游戏者的响应,再次运行程序或退出程序。

3、如果在刚开始游戏让我们输入数字时,我们选择了“取消”就会出错,您现在能利用自己已有的知识来解决这个问题吗?

好了,到这里,我们再回过头来看一看这个程序,理解起来还有困难吗?

本实例可能比前两个实例稍难一点。

如果您能顺利完成知识扩展中的问题题,那么祝贺您,您已过了入门的第一个小难关,可以进入下一步的实

例四了,如果您还存在疑问,则再请多动手把前三个实例练一练!

附:

完善的猜数游戏——

Sub您猜()

Dima,b,c,d,e,f

e=6'该数字用于计算所猜次数是否为优、良等

Do

a=0

Randomize

b=Int(100*Rnd)

Do

a=a+1

c=InputBox("请输入您所猜的数")

d=CInt(c)

Ifb

MsgBox("您猜的数大了")

ElseIfb>dThen

MsgBox("您猜的数小了")

Else:

b=d

MsgBox("哈哈,您猜对了!

")

ExitDo

EndIf

Loop

MsgBox("您猜了"&a&"次!

")

Ifa>e

MsgBox("您还需努力!

")

ElseifaMsgBox("您的猜数能力:

优!

")

Elsea=e

MsgBox("您的猜数能力:

良!

")

Endif

f=MsgBox("您还愿意继续玩吗?

",4,”继续游戏”)''注意此处常数的使用iff=7then''注意此处消息框返回值的使用

exitdo

else

endif

loop

EndSub

从零开始,步入Wor

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2