当前位置:文档之家› VBA语言最简明知识点

VBA语言最简明知识点

第0章VBA语言基础我们MFA的VBA讨论班已经进行了好几次了,但我们选用的教材似乎默认了读者是具有语言基础的,不少同学都表示课听起来比较迷糊,所以我就是产生了整理这个第0章的想法。

大家都已经学过c语言,对一种编程语言的基本要素应该都有一些认识,所以我在此主要是强调两种语言的不同之处,很多具体的东西(如循环语句)可以翻看前几次上课的ppt。

书写规范1)VBA不区分标识符的字母大小写,一律认为是小写字母;2)一行可以书写多条语句,各语句之间以冒号: 分开;3)一条语句可以多行书写,以空格加下划线_ 来标识下行为续行;标识符及命名规则略数据类型VBA共有12种数据类型,具体见下表,此外用户还可以根据以下类型用Type自定义数据类型。

变量与常量1)VBA允许使用未定义的变量,默认是变体变量。

2)在模块通用说明部份,加入Option Explicit 语句或者在vba编辑器中依次选择工具-选项-编辑器-要求变量声明可以强迫用户进行变量定义(推荐使用)。

3)变量定义语句及变量作用域Dim 变量as 类型'定义为局部变量,如Dim xyz as integerPrivate 变量as 类型'定义为私有变量,如Private xyz as bytePublic 变量as 类型'定义为公有变量,如Public xyz as singleGlobal 变量as 类型'定义为全局变量,如Globlal xyz as dateStatic 变量as 类型'定义为静态变量,如Static xyz as double一般变量作用域的原则是,那部份定义就在那部份起作用,模块中定义则在该模块那作用。

这一部分和c语言中的类似,实际上我也搞得不太清楚,大家有疑问的可以在版上提出来商量一下。

常量Const Pi=3.1415926 as single运算符(个人感觉只需要注意红色的部分)1)赋值运算符=2)数学运算符&(强制字符串连接,比如将数字强行转化成字符串到其它字符串前后)、+ (字符串连接符)、+(加)、-(减)、Mod(取余)、\(整除)、*(乘)、/(除)、-(负号)、^(指数)(很方便的东东,例如4^1.5=8…)3)逻辑运算符Not(非)、And(与)、Or(或)、Xor(异或)、Eqv(相等)、Imp(隐含)4)关系运算符= (相同)、<>(不等)、>(大于)、<(小于)、>=(不小于)、<=(不大于)、Is(对象的比较)5)位运算符Not(逻辑非)、And(逻辑与)、Or(逻辑或)、Xor(逻辑异或)、Eqv(逻辑等)、Imp(隐含)6)模式匹配(like)例如“ab” like “a*”为真具体的规则是:? 代一字符*代任意个字符#代一个数字[字符串A]代字符串A中任一个字符[!字符串A]表示不在A中的字符[A-U] 代A到U中的任一个字符例:Temp=”a2” Like “a#”TrueTemp=”aM5b” Like “a[L-P]#[!c-e]”TrueTemp=”H” Like “[!A-Z]”False数组Dim 数组名([lower to ]upper [, [lower to ]upper, ….]) as type ;Lower缺省值为0。

二维数组是按行列排列,如XYZ(行,列)。

例如:dim singlearray(20) as integerDim mutiarray(1 to 20, 20) as Boolean注意是用()括号,不是用[]注释语句1) 单引号’2) Rem推荐使用1) , 因为比较常见,rem我不太会用。

判断语句1)If…Then…Else语句如1:If A>B And C<D Then A=B+2 Else A=C+2如2:If x>250 Then x=x-100或者,可以使用块形式的语法:如:If Number < 10 ThenDigits = 1ElseIf Number < 100 ThenDigits = 2ElseDigits = 3End If2)Select Case…Case…End Case语句如1:Select Case PidCase “A101”Price=200Case “A102”Price=300……Case ElsePrice=900End Select3)Choose 函数choose(index, choce-1,choice-2,…,choice-n),可以用来选择自变量串列中的一个值,并将其返回,index表达式的结果是一个数值,且界于 1 和n间。

如:Choose(2, "Speedy", "United", "Federal") =“United”(这是真的)4)Switch函数Switch(expr-1, value-1[, expr-2, value-2 _ [, expr-n,value-n]])switch函数和Choose函数类似,但它是以两个一组的方式返回所要的值,在串列中,最先为TRUE的值会被返回。

expr 必要参数,要加以计算的Variant 表达式。

value 必要参数。

如果相关的表达式为True,则返回此部分的数值或表达式,没有一个表达式为True,Switch 会返回一个Null值。

循环语句1)For Next语句以指定次数来重复执行一组语句如1:For i=1 to 10Sum=sum+iNext i如2:For Words = 10 To 1 Step -1 ' words从10到1,每次以步长-1变化,循环十次@#¥#@¥^¥#^!^¥!¥^Next Words2)For Each…Next语句主要功能是对一个数组或集合对象进行,让所有元素重复执行一次语句如1:For Each rang2 In range1With range2.interior.colorindex=6.pattern=xlSolidEnd withNext rang2这上面一例中用到了With…End With 语句,目的是省去对象多次调用,加快速度;语法为:With object[statements]End With3)Do…loop语句在条件为true时,重复执行区块命令例1:(相当于c语言中的while-do语言)Do {while |until} condition ' while 为当型循环,until为直到型循环StatementsLoop例2:(相当于c语言中的do-while语言)DoStatementsLoop {while |until} condition0)可以使用exit for 或者exit do 退出相应的循环还有while-wend,但词语快被淘汰不推荐使用过程和函数过程是构成程序的一个模块,往往用来完成一个相对独立的功能。

过程可以使程序更清晰、更具结构性。

VBA具有四种过程:Sub 过程、Function函数、Property属性过程和Event 事件过程。

一.Sub过程(相当于c语言里面的void型子过程)Sub 过程的参数有两种传递方式:按值传递(ByVal)和按地址传递(ByRef)。

如下例:Sub password (ByVal x as integer, ByRef y as integer)If y=100 then y=x+y else y=x-yx=x+100End sub调用过程可以使用call语句+过程名(参数表),也可以直接使用过程名(参数表)如下面的过程调用上面的password:Sub call_password ()Dim x1 as integerDim y1 as integerx1=12y1=100Call password (x1,y1) ‘调用过程方式:1. Call 过程名(参数1, 参数2…) ; 2. 过程名参数1, 参数2…debug.print x1,y1 ‘结果是12、112,y1按地址传递改变了值,而x1按值传递,未改变原值End sub二.Function函数(相当于c中有具体类型的子过程,既需要返回值的)函数实际是实现一种映射,它通过一定的映射规则,完成运算并返回结果。

参数传递也两种:按值传递(ByVal)和按地址传递(ByRef)。

如下例:Function password(ByVal x as integer, byref y as integer) as booleanIf y=100 then y=x+y else y=x-yx=x+100if y=150 then password=true else password=falseEnd FunctionSub call_password ()Dim x1 as integerDim y1 as integerx1=12y1=100if password then(x1,y1)‘调用函数:1. 作为一个表达式放在=右端; 2. 作为参数使用debug.print x1end ifEnd sub三.Property属性过程和Event事件过程超过第0章范畴,请关注后续课程:)简单输入输出其实我们用的最多的输入输出还是直接通过对单元格操作进行实现,除此之外还是简要介绍以下最基本的输入输出语句一.输入弹出输入对话框:InputBox(提示语,标题,默认值,xpos,ypos,help,comtext)二.输出a)对象.print (其中对象可以为form,picturebox,debug等等)后面直接跟想打印的常量变量,如果有多个可以用;或者,隔开注意两者不同:用;隔开的是紧凑格式,中间没有空格的用,隔开的是标准格式,中间会有一些空格b)Msgbox() -----弹出输出窗口这个inputbox和msgbox我也用得不太熟,大家需要时可以baidu之查看详细规则…其实以上这些掌握之后我们就可以做很多事情了(虽然可能会很麻烦),虽然大家都学过c 语言,再接触这种语言上手会很快,但是真正的熟练掌握还是需要多加练习.所以大家可以随便找本教语言的或者数据结构的书(如果c的书还在的话就可以用c的),把上面的题目用vba 语言练习编写一下,有问题欢迎到mfa版上来交流. Practice makes perfect.另外为了减少工作量,熟悉vba的内置函数是必要的,当然我们不一定把所有的函数记住,不过要学会使用函数搜索功能找到我们所需要的函数――即在excel里面选择插入-函数,然后填写关键词,就可以搜到想要的函数。

相关主题