VBA概述之在Office产品中开创和谐的应用程序

VBA概述

    VBA(Visual Basic For
Application)是VB语言在Office产品中的应用,它按照Visual Basic For
Windows发展而来,Visual Basic For
Windows是Microsoft于1992年生产的开销Windows应用程序的主次设计语言,由于语言简单,易用易学,所以深受用户的欢迎。而VBA的语法结构与Visual
Basic For Windows基本相似,但它们中间是有本质区其余,Visual Basic For
Windows是一种编程语言,它可以创设独立的应用程序,而VBA是一种语法结构类似于Visual
Basic For
Windows的脚本语言,一般的话,它都是被停放在Microsoft的Office产品中来推行的。

    在Office
2000事先,VBA在Word、Excel、Access等Office系统软件中的运用是不同等的(那多少个时候Office家族中的产品为数不多),可是到Office
2000就集合起来了。Excel是首先个包含有VBA的Office产品,也是时至明天应用VBA最广泛的软件之一。自Office
2000之后,Excel、Word、PowerPoint、Access中一度有了统一标准的宏语言VBA,其中Excel和Access的VBA最为成熟(从Office
2000始发,Office家族中的产品起初多起来)。

    从Office
2003起头,Microsoft在Office家族中渐渐增多了过多成品,如OneNote、Publisher、InforPath、Visio等,不过除此之外对VBA中的对象开展了扩充外,在VBA的施用推广上并不曾特别大的转移,而且有些产品由于采纳上的题材也未曾提供对VBA的恢宏。

    近日,Office
2007曾经来临,并且在对VBA的支撑上也油但是生了一些扭转,随着Microsoft
.NET产品多元的不断扩充和深深,.NET也置于到Microsoft的依次不同的产品中,而其间VSTO就是特别针对VBA在Office产品中应用的一个提升方案,我会在接下去的有的篇章中向读者介绍它。然而Excel依旧是Office家族中运用VBA最广泛的产品,因而,我会以Excel为例来介绍VBA的运用,并在Office
2007软件基础上做一些示范。

    首先来看望我们应用VBA在Excel中可以做些什么事情。

   
Excel是一款效果很强大的用来拍卖表格数据的软件,它可以被用来做过多不同的干活,如记录客户的名字和学生的考试分数、举行收支预算、分析实验数据、制作发货单和表格、通过给定的数额总括图表等等,Excel的各类不同的机能被采取到各行各业,但有一点是一律的,这就是当要拍卖的数据量很大时,所有的用户都愿意让Excel可以充裕聪明地协调处理部分工作,“让Excel动起来”正是VBA可以办到的!

   
例如我们可以写一个VBA程序来格式化报表,并把它打印出来,经过开发和测试,我们最后得以只用一个命令就成功具有的劳作,而不用自己入手去一个个地敲命令、点击鼠标查找菜单…Excel可以在转弹指形成所有的工作,何乐而不为呢?

 

VBA在Excel中的两种习惯用法

    先看看大家在Excel中不时会用到的VBA:

    1.
频繁插入文本。倘若您时常索要在报表里插入一段文本,如公司的名称、版权信息等,你就足以写一个VBA程序来替代你做这件事。当然这再简单可是了,类似的图景会有为数不少,例如你仍是可以够让VBA帮忙你插入公司有着员工的人名(这多少个音讯或者来自一个网站或者数据库)。

    2.
电动完成反复的办事。假诺您是一名销售经营,需要平日写一份“月初销售报告”递交给总经理娘,即使这一个报表里的数量来源同一个地点,并且表格的样式没有特别大的改观,那么你完全可以因此VBA编写一个逻辑,让Excel自己去收集那多少个信息然后生成一张雅观的报表,而以此时刻里你要么去做其他更主要的政工,要么在一方面舒舒服服地喝一杯咖啡看着电脑为您干活儿。而主管也会为你有如此高的工作效用而对您另眼相看。

    3.
录制宏完成同样的动作。Excel中的宏其实也是VBA应用的一种,它是由Excel自动遵照你所指定的吩咐生成的VBA代码,执行这个代码就相当于履行了这一个命令。在Excel中,我们在一个报表里做完一项工作,同时录制了一个宏,然后可以在其它的报表里反复实践这一个宏,Excel可以毫无保留地帮我们将这项工作“复制”在所有的报表里。

    4.
自定义命令。在Excel中,大家可以把反复要利用的一多重操作写到一个宏里,然后绑定到急忙键或按钮上,以后只需要采取一个急忙键或点击一个按钮就足以很快地形成一多样命令。

    5.
自定义工具栏。听起来有点不可捉摸!我们可以透过VBA编写的代码在Excel的工具栏上放置自己的按钮,随时点击它。

    6.
自定义菜单。不仅能够定制工具栏,大家竟然可以通过VBA将自己的通令放到Excel的菜谱上,是不是很强啊?

    7.
打造数据表模板。通过制作数据表模板来协理这些Excel初学者更快地形成工作,以压缩他们所浪费的大运。

    8.
自定义工作表函数。即便Excel拥有许多的职能函数(如Sum何Average等),但一连在实质上的运用中显示不够,我们得以透过VBA添加自己的效率函数,用来成功部分一定的计量,从而简化总计过程。

    9.
支出完全由宏来驱动的利用。花点时间,VBA还是可以让您做过多巨型的应用程序,包括定制对话框、OnScreen
Help、数据同步、数据收集工具,以及任何更多的机能组件。

    10.
创设完全属于自己的Excel插件。Excel本身的插件已经重重了,平日状态下都够用,可是我们仍是可以够由此VBA开发属于自己的专有插件。Excel中用来生成总括图表的坚守就是一个插件,叫Analysis
ToolPak。

   
通过VBA可以开发Excel的累累功效,甚至于访问网络资源、遍历Windows域、访问远程机器上的文本等,只要去认真研商VBA语言本身提供的靶子,我们还足以窥见更多令人愕然的事物。VBA真的很强大!

 

VBA的得失

   
前边说了那么多VBA可以做的政工(即使还远远不止那些),那么VBA到底好在哪些地点呢?Excel几乎能自动完成有着你想做的事,只要能写出Excel命令,它就足以形功效用,所以VBA的自动化就体现了下面那一个亮点:

    1.
Excel在自动化具体任务时代码执行的各种不变(有的时候那看起来倒是一件好事)。

    2.
足以肯定的是,让Excel自动化一项工作肯定比手动去做到要快得多(我想没有人愿意手动去完成那么些繁琐而重复性的办事)。

    3.
只要拥有近乎完美的宏代码,Excel会永远无故障地运行(然则此外代码都是有瑕疵的)。

    4.
任谁都得以用Excel自动化一项具体做事,即便他历来不懂电脑编程(Excel的宏录制效用帮了很大的忙)。

    5.
浩大看似不太可能做到的事体都得以用Excel做得漂雅观亮的(前段时间我刚用Excel为一个网站做了一个前台数据录入工具)。

    6.
对此这些既花时间又费精力的事务,你再也不用坐在电脑前郁闷了,调用一个VBA编写的一声令下,剩下的政工你就不用管了,出去放松一下吧。

   
当然,就像拥有的编程语言同样,VBA也会有一些败笔,从利用的角度来看有以下几点(其余不好的地点应该也都从Visual
Basic For Windows这里继承过来了):

    1.
Excel的宏固然可以为你自动生成一些VBA代码,但大多数时候依旧需要你协调去编写代码将这么些效率公司起来,假使您未曾一点编程经验的话,这些对你的话也许有点困难。可是还好,VBA学起来仍然很容易的。

    2.
想要运行VBA必须要事先安装Office软件,尤其是Excel。它不容许像Visual Basic
For
Windows程序那样只需要双击一个exe文件就能举行起来(这看来也是脚本语言的局限性)。

    3.
VBA是变化的,在不同的Office版本中,VBA都有一部分一线的成形,这将促成你在Office
2000中编辑的VBA代码在Office 2003中不可以正确实施,反过来也一律。

 

在Excel中开始VBA程序

    我所示范和开发测试的条件都是起家在Excel
2007上,读者假设想演练,最好也在一如既往的软件条件下。

    首先打开Excel,默认安装配置下Excel
2007尚无出示“开发工具”菜单,我们需要打开它。点击窗体左上角的“Office按钮”,选取“Excel选项”,在对话框中采纳“常用”选项卡,勾选“在功用区展现‘开发工具’选项卡(D)”,确定。现在大家在Excel的菜单区就可以看来“开发工具”了,点击它,就足以起初大家的VBA程序了。

图片 1
图片 2
图片 3

   
为了让您的VBA程序如故宏代码可以如愿运作,你需要认可一下宏的实施安全设置。点击“宏安全性”,在对话框中精选“启用所有宏”,并勾选“信任对VBA工程目的模型的拜会”。现在我们可以完全自由地去编写大家的VBA程序了。

图片 4    
点击Visual
Basic,可以打开VB编辑器(简称VBE),大家的几乎拥有的VBA代码都是在此间编写的。当然,假如您早就是一位VB程序员,那么你会对那些编辑界面再熟谙不过了,它几乎就和VB
6的编辑界面一样,也有工程窗口、属性窗口和代码窗口,在此间我们一致可以添加控件、引用、模块以及Excel对象等因素。另外,通过甄选代码编辑窗口上方的多少个下拉列表,我们可以为不同目标的不比事件编写代码。所谓事件,就是大家在点击或采取控件时所形成的一多元动作,如命令按钮的点击事件,下拉列表下拉项的采纳,复选框或单选框的抉择等。

图片 5    
有关怎么着编写VB代码以及VB代码的中央特点已经不是本文要钻探的情节(事实上这多少个情节我们在求学电脑编程基础知识时也已经都打听过了),这里只对在Excel中行使VBA的一部分情景做一下介绍。

    1.
VBA大校Excel录制的宏写到一个VBA模块中(先明白摸底咋样叫做VB模块),它曾经包含了一层层独立的下令,可以看作一个VBA过程被调用。

    2.
一个VBA模块有不少“子过程”组成,它实施了“对象”上的局部操作,可以单独运行。例如我们在Excel
Sheet上添加一个Active控件(注意大多数时候大家在VBA中所使用的都是Active控件而不是表单控件),比如添加一个限令按钮,双击它,在代码编辑窗口中就可以添加相应的吩咐了。下边的代码是当用户点击命令按钮后提示1+1的结果。

图片 6

Private Sub
CommandButton1_Click()
    Dim sum As Integer
    sum = 1 + 1
    MsgBox “The answer
is ” & sum
End Sub

   
Excel中得以利用的Active控件不是特意多,这也表示了在VBA中用户对UI的决定没有专门多的选料,当然,假设您的微处理器上注册了别样可用的Active控件,只要允许,你完全也足以把它们引用到Excel中,只要点击“Active控件”中的最后一个图标,在对话框中精选要引用的Active控件即可。VBA中控件的应用和VB中一样,这里就不再一一介绍了。回到Excel主界面,退出设计格局(只需要再一次点击“设计情势”按钮即可),点击我们刚才添加的授命按钮,屏幕下边世了俺们刚刚在代码中加上的对话框。

图片 7   
3.
VBA模块中有无数的函数,函数一般重返单一值,它既可以被此外模块调用,也可以看作工作表函数来利用。

    4. VBA提供了诸多的已有对象,其中包括了WorkBook、WorkSheet、Cell
Range、Chart以及Shape等重大目的。

    5.
Excel对象有其自我的层次结构。一个目标足以涵盖其他的靶子,占据层次结构最下边的是Excel,而它自己就是一个目的,在代码中叫做Application,它含有了WorkBook和CommandBar等根本对象,WorkBook则又含有了WorkSheet和Chart等目的,WorkSheet又饱含了Range和PivotTable等对象…这个层次结构的目标组成了大家VBA代码的骨干部分。

    6.
同类对象社团在一块就形成了聚众,如WorkBook中带有的有着WorkSheet被叫作WorkSheet集合,而Chart集合则由方方面面的Chart对象组成。

    7.
凡是层次结构中的对象都可以在VBA中利用,跟大部分面向对象语言一样(即使VB和VBA还不可以被称为完全意义上的面向对象语言),我们选拔“.”运算符来调用。如Application.WorkBooks(“Book1.xls”),它代表WorkBooks集合中的一个称呼为Book1.xls的靶子(该目的为一个Excel文件),然后大家可以在这么些目的中援引Sheet对象,如Application.WorkBooks(“Books.xls”).WorkSheets(“Sheet1”)。虽然想进一步指定一个具体的单元格,就足以这样Application.WorkBooks(“Books.xls”).WorkSheets(“Sheet1”).Range(“A1”)。

    8.
Excel中的当前运动指标足以让我们在代码中接纳一种便利的主意来调用对象。假如Book1.xls就是时下正值编纂的工作表,那么刚才咱们引用对象的章程就可以简写为WorkSheets(“Sheet1”).Range(“A1”)。当然,如果当前编写的工作表就是Sheet1,可以一向写成Range(“A1”)。

    9.
Excel中各个对象都有其本身的特性。对象的特性可以知道为对象的安装项,固然是一个单元格(Range),也有它自己的性能,如Value(单元格的当前值)和Address(单元格在做事表中的地点)等。HasTitle(是否包含标题)和Type(图表类型)则是Chart对象的特性。VBA允许用户判断或变更对象的属性值。

 

    10.
在应用对象属性时,必须用“.”运算符来连接对象名和属性名,如WorkSheets(“Sheet1”).Range(“A1”).Value可以查阅当前工作表Sheet1中单元格A1的如今值。

    11.

变量赋值。同VB代码一样,在VBA代码中允许使用变量来囤积数值、文本和目的,如interest

WorkSheets(“Sheet1”).Range(“A1”).Value将工作表Sheet1的单元格A1的值赋值给一个interest变量。

    12.
目的还包括了可以在其上调用的措施。所谓方法,就是Excel在目的上得以执行的动作,如ClearContents被用来扫除Range内的内容。

    13.
模式的调用和性能的取得类似,也需要利用“.”运算符,如WorkSheets(“Sheet1”).Range(“A1”).ClearContents。

    14.
VBA包含了当代编程语言的保有语言结构,如数组、分支社团、循环结构、集合对象等。

   
通过以上部分简易的牵线,相信读者已经对VBA有了一个光景的垂询,我在前边的章节将官会陆续介绍VBA中的一些目标和用法。

 

Excel简史

   
我觉得仍然有必不可少在此间介绍一下Excel的发展历史,因为不同版本的Excel对VBA的支撑是不一致的。

    1. Excel
2:在Windows平台上,Excel最先导的版本号是2,这是为了和Mac平台上的Excel保持版本相同。Excel
2诞生于1987年,可是新兴几乎从未人再用它。

    2. Excel 3:于1990年末宣布,其中XLM宏语言也随之一起公布。

    3. Excel 4:于1992年终面试,继续包含了XLM宏语言。

    4. Excel 5:1994年上半年问世,VBA第一次在这一个版本中露面。

    5. Excel 95:从技术角度讲应该是Excel 7(其中并未Excel
6这些版本),该版本于1995年春季起首问世,是一个32位的本子,运行在Windows
95和NT平台上,其中增强了有的VBA的机能,并持续协助XLM。然则,Excel
95的文档格式和Excel 5相同。

    6. Excel 97:也可以被称为Excel 8,诞生于1997年元月,需要Windows
95和NT的支撑。在此版本中,VBA在功用上有了很大的滋长,其接口几乎所有被另行设计过,同时它还动用了崭新的文件格式(从前的本子不能够开拓这种格式)。

    7. Excel 2000:即Excel
9,于1999年1月颁发,仅增长了一点点功用,可是在用户体验方面立异了无数,尤其是网络用户。

    8. Excel 2002:也叫Excel 10或Excel
XP,于2001年下半年宣布。在这么些本子中最大的特性就是数据恢复生机(即Excel崩溃之后方可活动还原崩溃从前的数额),同时它也是第一个利用版权吝惜的版本。

    9. Excel 2003:Excel
11,那应该是眼前来说使用人口最多的本子,也是最好成熟的版本,然则较前一本子而言它并没有扩充哪些新特征。

    10. Excel 2007:随Office
2007出品同时发布,这些本子有了很大的更改,除了界面风格的改变外,还增添了按颜色筛选和排序的功效(这但是个很有用的效率,我在Excel
2003的时候还曾经用VBA开发过类似于这样的效率),同时,Office
2007的序列产品在文件格式上也有了很大的改动,Excel
2007的文书后缀为xlsx,它是一种截然公之于世的支撑XML可扩张的文件格式,这里有一篇小说介绍了Excel
2007的这种新文件格式。

http://blog.excelhome.net/user1/fanjy/archives/2007/940.html

   
了然Excel的上进历史和各个版本的两样是老大重大的,因为咱们需要确保不同版本的Excel对VBA的补助情状,制止别人在应用我们编辑的VBA程序时出现莫名其妙的荒唐,如VBA的Split函数是在Excel
2000中才引入的,虽然在Excel
2000事先的版本中运用带有Split函数的VBA程序,则会油不过生编译错误。

 

结语

   
VBA在Excel中的应用十分广阔,长远领悟并行使VBA,可以大大提升我们在使用Excel时的工作成效,达到意料之外的法力。此外,顺便还要说一句,Excel在针对不同的数据类型时方可保存为不同门类的文书,在包含VBA的Excel文件中,为了保证将来可以顺畅打开文件并实施其中的VBA代码,指出读者将Excel文件保留为xlsm类型(它表示一种启用宏的工作簿)。

   
本文只是一个开篇,简单介绍了VBA的前进历史和运用范围,并举例表达了一晃怎么在Excel中编辑并运行自己的VBA程序,接下去我会详细向我们介绍VBA中见惯司空的靶子的拔取格局,其中我们也相会到部分不堪设想的成效,但是这都很简短,毕竟VBA只是本子,它并不复杂!

 

(在此感谢好友杨智——Jeffrey R. Young提供的佑助)

发表评论

电子邮件地址不会被公开。 必填项已用*标注