VBA最最基础入门目录1:什么是VBA?为什么要学VBA?2:宏3:VBA编辑器4:对象、属性、方法,事件5:VBA过程6:数据类型、变量、常量、数组7:程序语句1:什么是VBA?为什么要学VBA?•VBA是VisualBasicforApplications的简写,是一种应用程序开发工具。可以用VBA来开发软件产品,来满足软件某些方面的需要。VBA的独特之处在于它由应用程序控制,反过来,它又可以增强该应用程序的功能。微软的office和autocad都有VBA。•我们为什么要学VBA?如果只需要满足一些普通的工作需求可能永远也不会用到VBA,但在实际应用的过程中,人们的操作却越来越大,需要也越来越高,这时候就需要用VBA来对软件进行二次开发了,VBA可以有效地自定义和扩展软件的功能。VBA功能很强大,但并不是万能的,也并不是所有工作都需要用VBA来解决,也并不是所有工作用VBA来解决都会很简单,这要根据实际情况而定,有些工作用VBA来解决的话相反会变得很麻烦。2:宏•宏就是用“VBA”高级程序语言编制出来的程序就叫“宏”。每个软件的宏对话框不是完全一模一样,但是大体是相同的,下面以3DMine软件为例子讲解。4:对象、属性、方法,事件•对象VBA与传统语言的重要区别之一就是它是面向对象的。对象是VisualBasic程序设计的核心。事实上,窗体和控件都是对象,数据库也是对象,对象到处都存在。一旦理解如何引用应用程序对象模型中的对象,就能够使用对象及其特性来建立自己的解决方案。对象是为了管理数据和代码的方便而提出的。事实上,在VBA中,对象是封装数据和代码的客体。它是代码和数据的组合,可将它看作单元。每个对象由类来定义。对象具有属性、方法和事件。•属性属性是一个对象的特性,它定义了对象的特征,诸如大小、颜色或屏幕位置,或某一方面的行为,如对象是否激活或可见。可以通过修改对象的属性值来改变对象的特性。•方法方法指的是对象能执行的动作。方法是一些系统封装起来的通用过程和函数,以方便用户的调用,对象方法的调用格式为[对象.]方法[参数名表]•事件事件是一个对象可以辨认的动作,如C1ick(单击)、DbC1ick(双击)等,系统为每个对象预先定义好了一系列的事件,当在对象上发生了事件后,应用程序就要处理这个事件,而处理的步骤就是事件过程。5:VBA过程•一个过程就是执行某些动作的代码组合。VBA过程分Sub过程和Function过程。1、Sub过程总是以“sub过程名()”开头,以“EndSub”结尾,一个过程就是执行某项动作的一套指令,Sub过程不返回运行的结果。2、Function总是以“Function程序名()”开头,以“EndFunction”结尾,和Sub过程的区别是Function过程返回程序运行的值,值可以是一个值或一个数组,就像我们的工作表函数,Function过程也就是我们说的自定义函数。要设计一个过程,其实很简单,把需要的对象收集起来,看看我们要对他们的属性进行怎样的修改?我们需要做什么?需要用什么样的方法?要用哪些事件?收集起来就是一个完整的过程。6:数据类型、变量、常量、数组•数据类型VBA支持数据类型包括Byte、Boolean、Integer、Long、Single、Double、Date、String、Object、Variant(默认)和用户定义类型等。•变量①变量的概念变量是内存中用于存储值的临时存储区域。在使用变量之前,必须先声明它,声明通知VBA使用它的名字和数据类型。变量名必须以字母字符开头,在同一范围内必须是惟一的,不能超过255个字符。可以给变量指定任何名字,但在VBA中应注意以下几点。1)变量名不能包含下列字符:+、—、/、*、!、、、.、@、$、&等。2)变量名不能包含空格,但是可以包含下划线②声明变量声明变量有两个作用,一是指定变量的类型,二是指定变量的适用范围(应用程序中可以引用变量的作用域)。定义变量可以使用Dim语句:Dim变量名As数据类型在VBA中,所有没用DIM语句显示声明类型的变量都被自动视为Variant数据类型。我们可以在模块中输入“OptionExplict”作为第一句语句来强制声明所有变量。也可以点“工具——选项”,在选项对话框里勾选“要求声明变量”。这样,VBA在遇到没有声明的变量名称,该语句将导致程序停止。定义变量除了可以使用Dim语句外,比较常的还有:static语句,Private语句,Public语句。使用不同的语句定义的变量不同的是它们的作用作用域不同,具体为:(1)如果在一个过程中包含了一个Dim或Static语句,此时声明的变量作用域为此过程,即本地变量。(2)如果在一个模块的第一个过程之前包含了Dim或Prvate语句,此时声明的变量作用域为此模块里所有的过程,也就是在此模块里所有的过程都可以使用它,即模块作用域下的变量3)如果在一个模块的第一个过程之前包含了Public语名,此时声明的变量作用域为所有模块,即公有变量。•常量常量在程序执行期间,它的值总是保持固定。常量可以是数字、字符串,也可以是其他值。每个应用程序都包含一组常量,用户也可以定义新常量。一旦定义了常量,就可以在程序中使用它。VBA支持两种类型的常量,即内置常量和用户定义的常量。常量声明后,不可以对它进行再赋值。声明常量设定常量的值,需要用Const语句:Const常量名As数据类型=常量的值•数组数组是具有相同数据类型并且共享一个名字的一组变量的集合。数组也是变量。数组中的元素通过索引数字加以区分。可以用Dim语句或者Public语句声明数组。Dim/Public数组名(atob)as数据类型a和b是数组中元素的个数,数组元素素最小值为a,最大值为b,元素个数为(b-a+1)个,当然,你也可以直接输入个数,此时默认最小索引号为0。如:Dimmyarr(5)AsInteger这个数组的最小元素索引号为0,元素个数为6。上面定义的只是一维数组,你还可以定义二维、三维、四维…….如:Dimmyarr(1to5,1to10)AsInteger这就是一个二维数组,元素个数为5*10=50个。在程序设计的过程中,定义数组的时候我们可能不能确定数组的元素个数,对数组进行声明后,可以在运行时用ReDim语句重新指定数组的大小。VBA支持的最大维数为60。7:程序语句书写程序语句时必须遵循的构造规则称为语法。缺省情况下,在输入语句的过程中,VBA将自动对输入的内容进行语法检查,如果发现错误,将弹出一个信息框提示出错的原因,VBA还会约定对语句进行简单的格式化处理。与传统的程序设计语言一样,VBA也具有结构化程序设计的3种结构:顺序结构、选择结构和循环结构。VBA包含赋值语句、If语句、SelectCase语句、Do…Loop语句、For…Next语句、FoxEach…Next语句。While…Wend语句、Exit语句和GoTo语句。•顺序结构下面示例是指定InputBox函数的返回值给变量yourName。SubQuestion()DimyourNameAsStringyourName=InputBox(Whatisyourname?)MsgBoxYournameis&yourNameEndSub•选择结构IF...Then...Else语句根据条件的值,可使用If...Then...Else语句运行指定的语句或一个语句块。IF...Then...Else语句可以根据需要嵌套多级。然而,为了可读性可能会使用SelectCase语句而不使用多嵌套的If...Then...Else语句。使用If...Then...Else语句可以定义两个可执行的语句块,其中一个块会在条件为True时执行;而另一个块会在条件为False时执行。下列的示例显示了语法:Subtest()DimxAsDoubleDimyAsDoubleIfx0Theny=x+1Elsey=xEndIfEndSub•SelectCase语句当一个表达式与几个不同的值相比较时,可以使用SelectCase语句来交替使用。在下面的示例中,SelectCase语句会计算发送给此过程的参数performance。请注意,每个Case语句可以包含一个以上的值,一个值的范围,或是一个值的组合以及比较运算符。如果SelectCase语句与Case语句的任何值不匹配,则可选择CaseElse语句运行。下列的示例显示了语法:FunctionBonus(performance,salary)SelectCaseperformanceCase1Bonus=salary*0.1Case2,3Bonus=salary*0.09Case4To6Bonus=salary*0.07CaseIs8Bonus=100CaseElseBonus=0EndSelectEndFunction•循环语句ForEach...Next语句ForEach...Next语句会重复一个语句块,而它是作用于集合中的每个对象或是数组中的每个元素。当循环执行一次则VisualBasic会自动设置一个变量。下面的代码会在数组的每个元素中循环,并且将每个值设置成它的索引变量i的值。下列的示例显示了语法:DimTestArray(10)AsIntegerDimiAsVariantForEachiInTestArrayTestArray(i)=iNexti•Do...Loop语句可以使用Do...Loop语句去运行语句的块,而它所用掉的时间是不确定的。当条件为True或直到条件变成True时,此语句会一直重复。在下面的TestLoop过程中,在进入循环之前检查条件。如果将myNum的值由20替换成9,则循环中的语句将永远不会运行。下列的示例显示了语法:SubTestLoop()counter=0myNum=20DoWhilemyNum10myNum=myNum-1counter=counter+1LoopMsgBoxTheloopmade&counter&repetitions.EndSub•While….Wend语句格式:While判断条件循环语句组Wend当判断条件为True时执行循环语句,为False时执行Wend后的语句。下列的示例显示了语法:Subwhi()DimCounterasIntegerCounter=0Total=0WhileCounter20Total=total+1Counter=Counter+1WendEndsub