一、VBA的发展过程
—-在Office中包含着一种加强Office功能的语言,即为Basic语言。经过发展,在Office97中,Word、Excel、Access、PowerPoint四个软件都有了自己的程序设计语言,分别称为MicrosoftWordVisualBasic、MicrosoftExcelVisualBasic、MicrosoftAccessVisualBasic、MicrosoftPowerPointVisualBasic。通常统一称为VBA。在Outlook中的开发语言为VisualBasicScriptingEdition,而不是一个完全的VBA。不过,VisualBasicScriptingEdition是VBA的一个较小的子集,它与VBA兼容。当然,有一些VBA支持的特性,VisualBasicScriptingEdition并不支持。
二、VBA开发特点
—-1.MicrosoftOffice对象模型
—-VisualBasic是一种面向对象的开发语言。VBA将MicrosoftOffice中的每一个应用程序都看成一个对象。每个应用程序都由各自的Application对象代表。
—-在Word中,Application对象中包容了Word的菜单栏、工具栏、Word命令等的相应对象,以及文档对象等等。菜单栏对象中包容了所有的菜单及菜单命令。工具栏对象中包容了各种命令按钮。文档对象中则包容了所有的文字、表格、图像等文档组成部分的相应对象。文档对象是MicrosoftWordVisualBasic中的主要对象。
—-在Excel中,Application对象中包容了Excel的菜单栏、工具栏等的相应对象,以及工作表对象和图表对象等等。工作表对象和图表对象是MicrosoftExcelVisualBasic中的主要对象。
—-在Access中,Application对象中包容了Access的菜单栏、工具栏等的相应对象,以及报表对象和窗体对象等等。报表对象和窗体对象是MicrosoftAccessVisualBasic中的主要对象。
—-在PowerPoint中,Application对象中包容了PowerPoint的菜单栏、工具栏等的相应对象,以及演示文档对象等等。演示文档对象是MicrosoftPowerPointVisualBasic中的主要对象。
—-2.基于对象的开发
—-(1)使用MicrosoftOffice对象
—-Office已经具有了强大的功能,Office的对象模型使得可以使用MicrosoftOffice中的对象来完成自己的工作。程序员可以不必浪费时间开发自己的组件,只需充分地利用Office的功能。Office开发者可以在Office的基础上进行自己的开发,而不必一切从头开始。例如,Office开发者可以使用Word的拼写检查器,而不必自己来开发一个拼写检查器。
—-(2)用户创建对象
—-Office开发者可以在Office对象中创建自己的对象:可以创建自己的菜单和工具栏,添加到Office的对象集合中;可以创建一个窗体,并且在窗体中添加控件,等等。例如,在Word中,可以往自动更正的词库中添加自己的词条。
—-3.VBA开发Office的功用
—-有人也许觉得Office的功能已经足够强大了,是否还有必要使用VBA来开发Office。的确,即使根本不用编写一句语句,Office就可以完成用户所能遇到的各种任务。但是,人们对效率的追求是永不满足的,这就是使用VBA来开发Offic的原动力。
—-(1)VBA可以使Office任务自动化
—-在使用Office的过程中,往往要遇到一些重复性的系列工作,特别是在处理大批量的文档或数据时。通过录制宏或使用VisualBasic编写宏,使一系列的工作只需要一个指令便能完成,这就成倍地提高了工作效率。
—-(2)VBA可以定制Office满足自己的需要
—-Office是一个功能异常庞杂的软件包,对某一用户来所说,许多命令可能一辈子也用不着,而另外一些命令可能得经常使用。有时候,功能复杂反而显得多余。
—-另外,Office的外观显得异常的繁杂,许多用户面对如此繁杂的界面往往手足无措。
—-通过VBA可以设置自己的界面,把自己经常用到的菜单命令和工具栏放置到显眼的地方,隐藏一些不常用的菜单或工具栏,并且,可以把自己所编写的宏设置为菜单命令或设置为工具栏中的命令按钮,方便了使用。
—-并且,可以根据自己的需要来定制Office的功能,满足自己的需要。
—-(3)VBA可以增强Office的功能
—-Office的功能虽然强大,但它不可能考虑到所有情况,而且情况是千变万化的,各种情况都有特定的要求。
—-通过VBA可以增强Office的功能,以处理各种各样的任务。例如,可以设置Word拼写检查的词库;可以往词库中添加新的词语;可以设置自动更正,设置自己经常遇到的误拼等。
—-(4)VBA可以增强Office与用户的交互
—-在Office中,可以利用VisualBasic创建窗体,并在窗体中添加控件等用户接口元素。通过用户接口,应用程序可以得到用户的请求,并对其作出响应。
—-(5)VBA可以集成Office的功能
—-Office不是几个软件的简单组合,而成为一个有机的整体发挥巨大的作用。VisualBasic提供了集成Office的功能的一种手段。
—-通过OLE(对象的链接和嵌入)和DDE(动态数据交换)技术的使用可以集成Office的功能。例如,利用VisualBasic,可以在Word文档中链接Excel数据表,调用Excel来对该数据进行处理。在Excel中处理该数据表,得到结果也要刷新Word文档中的数据表,保持了数据的更新。这时的文档确切地说应该是一个复合文档。
—-OLE自动化技术则提供了一种在应用程序中控制源文档的方法。OLE自动化的优点是,在单一的环境中工作,同时可以使用其他应用程序的功能。
—-在MicrosoftOffice环境中,利用VisualBasic开发应用程序时,可以利用OLE自动化组合MicrosoftOffice中的多个应用程序,建立自动化应用程序。MicrosoftOffice提供了大量的材料,只需把它们拼凑起来。
三、简单开发实例:
字符统计程序
—-有时候,要对某字符在文档中的出现次数进行统计。要完成这一任务,可以在Word中开发一程序来较快地统计。
—-打开要统计的文档后,在文本框中输入要统计的字符,如“OK!”,然后选择是否区分大小写,单击“确定”按钮,便可以进行统计了。
—-设计该程序的步骤如下:
—-1.新建一窗体Userform1,窗体的caption属性设置为“字符统计”。窗体中包容以下控件:
—-复选框控件CheckBox1Caption=“区分大小写”
—-命令按钮控件CommandButton1Caption=“确定”
—-标签控件Label1Caption=“输入您要统计的字符:”
—-2.在单击命令按钮控件CommandButton1后便执行统计工作,代码如下:
PrivateSubCommandButton1_Click()
DimcountofappearasInteger
Selection.WholeStory
WithSelection
.Find.ClearFormatting
With.Find
.Text=UserForm1.TextBox1.Text
IfUserForm1.CheckBox1.Value=TrueThen
.MatchCase=True
Else
.MatchCase=False
EndIf
.Execute
EndWith
EndWith
IfNotSelection.Find.Found()Then
MsgBox“未找到”
ExitSub
EndIf
WhileSelection.Find.Found()
countofappear=countofappear+1
Selection.Find.Execute
Wend
MsgBox“找到了”&countofappear&“个”
EndSub
—-讲解:首先用语句Selection.WholeStory选定全文。
—-使用Selection.find.execute语句进行一次对字符的查找操作,如下:
WithSelection
.Find.ClearFormatting
With.Find
.Text=UserForm1.TextBox1.Text
IfUserForm1.CheckBox1.Value=TrueThen
.MatchCase=True
Else
.MatchCase=False
EndIf
.Execute
EndWith
EndWith
—-上述语句中使用Find对象的ClearFormatting方法作用是清除任何为进行查找或替换操作所指定的格式,相当于“编辑”菜单“查找和替换”对话框中的“不限定格式”按钮。
—-另外,MatchCase属性设置查找操作是否区分大小写。
—-如果没有找到,则弹出一消息框,告知没有找到,并退出子程序,语句为:
IfNotSelection.Find.Found()Then
MsgBox“未找到”
ExitSub
EndIf
—-如果找到一处,然后进行下一次查找,以下如此循环,每找到一次countofappear变量便加1,来代表指定字符在文档中出现的次数,语句为:
WhileSelection.Find.Found()
countofappear=countofappear+1
Selection.Find.Execute
Wend
—-在程序中Selection.Find.Found()函数用来知道是否找到指定的字符。
—-最后,弹出一个消息框来告知字符在文档中出现的次数。
->