VBA概述之在Office产品受到开创好之应用程序。通过VBA检索AD中之用户。

VBA概述

      VBA作为一如既往种植被用在Microsoft
Office产品受到之脚本语言,功能实在是深有力的,这如归功给它们延续了Visual
Basic的成百上千优良传统,如我们好在VBA工程中像VB
6一样引入类库或ActiveX控件。当然,你当VB
6中使用的零部件或控件也形成得以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产品遭来实行的。

betway必威 1

    在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家族中的出品开始多起)。

        VBA支持ADO,这为代表我们好于VBA中操作数据库,包括SQL
Server、Access等。正因为这样,你可以尝尝在当Excel中修一个VBA程序来用Excel作为一个用以数据并的中等件,该中间件好就此来一块应用程序与后台数据库被的数量,并在中开有拍卖。这是全然好得的!我当前面的一个种遭到不怕既做过这样的事例,我们还是通过Excel同步了SQL
Server和Sharepoint List之间的多寡(这个我会在跟着的局部被重新举行牵线)。

    从Office
2003始发,Microsoft在Office家族中日益增加了无数产品,如OneNote、Publisher、InforPath、Visio等,但是除此之外对VBA中之目标进行了扩大外,在VBA的采用推广及并没特意特别的变动,而且有些产品由应用及之题目呢尚未提供对VBA的恢宏。

     
ADO的效益吗异常强劲,我们得以当里实行Windows脚本,经常应用的就是经它来保管Windows
Server的AD,如总体历AD中之账户,批量修改AD中的账户等,这曾经没什么好奇怪的了,你了好在Windows上运用记事本编写一个vbs脚本,然后径直动用她来保管而服务器上的AD,当然,基于安全考虑,这些还是内需适宜的实践权的。这些干活儿经过VBA也得形成,并且于Excel中君晤面意识有上死有益于,如借用Excel现有的UI来呈现所操作的数;基于所查询的数来生成图表;使用Excel提供的效益修改数据;遍历和团伙数据的方便性等等…

    如今,Office
2007早已到来,并且在对VBA的支持上为应运而生了片弯,随着Microsoft
.NET产品多元之不断扩大和深刻,.NET也放到Microsoft的一一不同之制品受,而里边VSTO就是专程针对VBA在Office产品被行使之一个提升方案,我会在连片下去的组成部分章中往读者介绍其。不过Excel仍然是Office家族中使VBA最常见的活,因此,我会以Excel为条例来介绍VBA的行使,并于Office
2007软件基础及召开有示范。

      下面我深受出一个示范。在新的Sheet中上加一个ActiveX
Button,然后上加下面的代码。

    首先来探我们运用VBA于Excel中可做来什么事情。

Private Sub
CommandButton1_Click()
    On Error Resume Next

   
Excel是一致磨蹭效果非常有力的用于拍卖表格数据的软件,它好让用来开过多异的行事,如记录客户之名字以及学习者的考试分数、进行收支预算、分析实验数据、制作发货单和表格、通过加的数统计图表等等,Excel的各种不同的作用为采用至各行各业,但产生某些是同样的,那便是当要处理的数据量很老时,所有的用户还愿意让Excel可以好明白地自己处理部分工作,“让Excel动起来”正是VBA可以办到的!

    Const ADS_SCOPE_SUBTREE = 2
    
    Set objConnection = CreateObject(“ADODB.Connection”)
    Set objCommand = CreateObject(“ADODB.Command”)
    objConnection.Provider = “ADsDSOObject”
    objConnection.Open “Active Directory Provider”
    Set objCommand.ActiveConnection =
objConnection
    
    objCommand.Properties(“Page
Size”) = 1000
    objCommand.Properties(“Searchscope”)
= ADS_SCOPE_SUBTREE
    
    objCommand.CommandText = _
        “SELECT Name FROM ‘LDAP://dc=XXX,dc=com’ WHERE
objectCategory=’user'” ‘search all
users from the domn XXX
    Set
objRecordSet = objCommand.Execute
    objRecordSet.MoveFirst
    
    Dim currCell As Range
    Set currCell =
Range(“A1”)
    
    Do Until objRecordSet.EOF
        currCell.Value = objRecordSet.fields(“Name”).Value
        Set currCell =
currCell.Offset(1, 0)
        objRecordSet.MoveNext
    Loop
End Sub

   
例如我们好形容一个VBA程序来格式化报表,并把其打印出来,经过开发同测试,我们最后可以只用一个下令就到位所有的办事,而未用好动手去一个个地敲命令、点击鼠标查找菜单…Excel可以在刹那间完成有的做事,何乐而非为耶?

     
代码中自下了一个假象的地区名称XXX,读者如果想只要测试可将那个转移成为真的域名称。我们使用ADO对所指定的处进行了用户查询,并将域中装有用户之Name依次输出到Excel当前Sheet的首先排列被,下面是出口结果的有些截图。

 

betway必威 2

VBA以Excel中的几种植习惯用法

      有关如何通过脚本操作AD,读者可参考一下Microsoft的官文档http://www.microsoft.com/technet/scriptcenter/guide/sas_usr_ykxh.mspx?mfr=true

    先瞧我们以Excel中常常会面因此到的VBA:

      如果权力允许,稍微修改一下方的代码,完全可以实现批量修改AD中之账户的成效,鉴于公司网络环境,这里不便于开展测试了,读者如果发生标准好团结尝试。

    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程序了。

betway必威 3
betway必威 4
betway必威 5

   
为了给你的VBA程序还是宏代码能够顺畅运转,你用肯定一下宏的尽安全设置。点击“宏安全性”,在对话框中摘“启用所有宏”,并勾选“信任对VBA工程目标模型的拜访”。现在咱们得以完全自由地失去编写我们的VBA程序了。

betway必威 6    
点击Visual
Basic,可以打开VB编辑器(简称VBE),我们的几所有的VBA代码都是在这里修的。当然,如果您既是平员VB程序员,那么你会指向之编辑界面再熟悉而了,它几乎就是和VB
6的编辑界面一样,也出工窗口、属性窗口及代码窗口,在这里我们一致好填补加控件、引用、模块和Excel对象等元素。另外,通过甄选代码编辑窗口上的少独下拉列表,我们好啊歧目标的差事件编写代码。所谓事件,就是咱于点击或选择控件时所好的同等多级动作,如命按钮的点击事件,下拉列表下拉起的挑三拣四,复选框或单选框的选项当。

betway必威 7    
有关如何编写VB代码以及VB代码的中心特点都休是本文要讨论的始末(事实上这些情节大家以攻电脑编程基础知识时为早就还打听了了),这里就对在Excel中使VBA的一部分状举行一下介绍。

    1.
VBA中将Excel录制的宏写到一个VBA模块中(先了解摸底什么叫VB模块),它已包含了平文山会海独立的授命,可以看成一个VBA过程叫调用。

    2.
一个VBA模块出无数“子过程”组成,它实施了“对象”上的组成部分操作,可以独立运作。例如我们于Excel
Sheet上添加一个Active控件(注意大多数时节咱们以VBA中所用的且是Active控件而非是表单控件),比如添加一个令按钮,双击它,在代码编辑窗口中不怕可添加相应的授命了。下面的代码是当用户点击命令按钮后提醒1+1底结果。

betway必威 8

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主界面,退出设计模式(只需要重点击“设计模式”按钮即可),点击我们刚才添加底通令按钮,屏幕上出现了我们刚在代码中增长的对话框。

betway必威 9   
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年6月发表,仅提高了一点点功能,不过以用户体验者精益求精了不少,尤其是网用户。

    8. Excel 2002:也叫Excel 10要Excel
XP,于2001年下半年颁。在这个本betway必威被尽要命之特性即是数据恢复(即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提供的救助)

相关文章

发表评论

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