Betway必威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代码的中坚特点都不是本文要讨论的始末(事实上这些情节大家在就学电脑编程基础知识时也一度都了解了了),这里只针对在ExcelBetway必威中采用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年下半年通告。在斯版本被极度老的表征即是数据恢复(即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提供的助)