VBA语言基础.doc_第1页
VBA语言基础.doc_第2页
VBA语言基础.doc_第3页
VBA语言基础.doc_第4页
VBA语言基础.doc_第5页
已阅读5页,还剩3页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第0章 VBA语言基础我们MFA的VBA讨论班已经进行了好几次了,但我们选用的教材似乎默认了读者是具有语言基础的,不少同学都表示课听起来比较迷糊,所以我就是产生了整理这个第0章的想法。大家都已经学过c语言,对一种编程语言的基本要素应该都有一些认识,所以我在此主要是强调两种语言的不同之处,很多具体的东西(如循环语句)可以翻看前几次上课的ppt。 书写规范 1)VBA不区分标识符的字母大小写,一律认为是小写字母; 2)一行可以书写多条语句,各语句之间以冒号 : 分开; 3)一条语句可以多行书写,以空格加下划线 _ 来标识下行为续行; 标识符及命名规则 略数据类型 VBA共有12种数据类型,具体见下表,此外用户还可以根据以下类型用Type自定义数据类型。数据类型类型标识符说明符备注C语言字节型Byte无0-255Char整型Integer%Int长整型Long&Long int单精度浮点型Single!Float双精度浮点型Double#Double货币型Currency四位小数,小数点后数据精确计算貌似无日期型Date无例如:#25/12/2007#表示今年圣诞节同上布尔型Boolean无Ture/false同上变体类型(默认)Variant同上字符串型String$Char自定义型自定义Type student Code as integer Age as integer End Type类似于结构体 变量与常量 1)VBA允许使用未定义的变量,默认是变体变量。 2)在模块通用说明部份,加入 Option Explicit 语句或者在vba编辑器中依次选择工具选项编辑器要求变量声明可以强迫用户进行变量定义(推荐使用)。3)变量定义语句及变量作用域 Dim 变量 as 类型 定义为局部变量,如 Dim xyz as integer Private 变量 as 类型 定义为私有变量,如 Private xyz as byte Public 变量 as 类型 定义为公有变量,如 Public xyz as single Global 变量 as 类型 定义为全局变量,如 Globlal xyz as date Static 变量 as 类型 定义为静态变量,如 Static xyz as double 一般变量作用域的原则是,那部份定义就在那部份起作用,模块中定义则在该模块那作用。 这一部分和c语言中的类似,实际上我也搞得不太清楚,大家有疑问的可以在版上提出来商量一下。常量Const Pi=3.1415926 as single 运算符(个人感觉只需要注意红色的部分) 1)赋值运算符 = 2)数学运算符 &(强制字符串连接,比如将数字强行转化成字符串到其它字符串前后)、+ (字符串连接符)、+(加)、-(减)、Mod(取余)、(整除)、*(乘)、/(除)、-(负号)、(指数)(很方便的东东,例如1.5=8) 3)逻辑运算符Not(非)、And(与)、Or(或)、Xor(异或)、Eqv(相等)、Imp(隐含) 4)关系运算符 = (相同)、(不等)、(大于)、=(不小于)、B And C250 Then x=x-100 或者,可以使用块形式的语法: 如: If Number 10 Then Digits = 1 ElseIf Number 100 Then Digits = 2 Else Digits = 3 End If 2)Select CaseCaseEnd Case语句 如1: Select Case Pid Case “A101” Price=200 Case “A102” Price=300 Case Else Price=900 End Select 3)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 10 Sum=sum+iNext i如2:For Words = 10 To 1 Step -1 words从10到1,每次以步长-1变化,循环十次 #¥#¥#!¥!¥Next Words 2)For EachNext语句 主要功能是对一个数组或集合对象进行,让所有元素重复执行一次语句 如1: For Each rang2 In range1 With erior .colorindex=6 .pattern=xlSolid End with Next rang2这上面一例中用到了 WithEnd With 语句,目的是省去对象多次调用,加快速度;语法为: With object statements End With 3)Doloop语句 在条件为true时,重复执行区块命令 例1:(相当于c语言中的whiledo语言)Do while |until condition while 为当型循环,until为直到型循环StatementsLoop 例2:(相当于c语言中的dowhile语言)Do Statements Loop while |until condition 0) 可以使用exit for 或者 exit do 退出相应的循环还有whilewend,但词语快被淘汰不推荐使用过程和函数 过程是构成程序的一个模块,往往用来完成一个相对独立的功能。过程可以使程序更清晰、更具结构性。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-y x=x+100 End sub 调用过程可以使用call语句过程名(参数表),也可以直接使用过程名(参数表)如下面的过程调用上面的password:Sub call_password () Dim x1 as integer Dim y1 as integer x1=12 y1=100 Call 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 boolean If y=100 then y=x+y else y=x-y x=x+100 if y=150 then password=true else password=false End Function Sub call_password () Dim x1 as integer Dim y1 as integer x1=12 y1=100 if password then(1,1) 调用函数:1. 作为一个表达式放在=右端 ; 2. 作为参数使用 debug.print x1 end if End 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里面选择插入函数,然后填写关键词,就可以搜到想要的函数。关于每个函数具体的用法可以查看微软的在线help,也可以查看excel2003函数应用完全手册(可以在mfa版上下载,或者在数院ftp里我的目录00501101下面)。附:一些常用内部函数列表一测试函数 IsNumeric(x) 是否为数字, 返回Boolean结果,True or False IsDate(x) 是否是日期, 返回Boolean结果,True or False IsEmpty(x) 是否为Empty, 返回Boolean结果,True or False IsArray(x) 指出变量是否为一个数组。 IsError(expression) 指出表达式是否为一个错误值 IsNull(expression) 指出表达式是否不包含任何有效数据 (Null)。 IsObject(identifier) 指出标识符是否表示对象变量 二数学函数 Sin(X)、Cos(X)、Tan(X)、Atan(x) 三角函数,单位为弧度 Log(x) 返回x的自然对数 Exp(x)返回 ex Abs(x) 返回绝对值 Int(number)、Fix(number) 都返回参数的整数部分,区别:Int 将 -8.4 转换成 -9,而 Fix 将-8.4 转换成 -8 Sgn(number) 返回一个 Variant (Integer),指出参数的正负号 Sqr(number) 返回一个 Double,指定参数的平方根 VarType(varname) 返回一个 Integer,指出变量的子类型 Rnd(x)返回0-1之间的单精度数据,x为随机种子 三字符串函数 Trim(string) 去掉string左右两端空白 Ltrim(string) 去掉string左端空白 Rtrim(string) 去掉string右端空白 Len(string) 计算string长度 Left(string, x) 取string左段x个字符组成的字符串 Right(string, x) 取string右段x个字符组成的字符串 Mid(string, start,x) 取string从start位开始的x个字符组成的字符串 Ucase(string) 转换为大写 Lcase(string) 转换为小写 Space(x) 返回x个空白的字符串 Asc(string) 返回一个 integer,代表字符串中首字母的字符代码 Chr(charcode) 返回 string,其中包含有与指定的字符代码相关的字符 四转换函数 CBool(expression) 转换为Boolean型 CByte(expression) 转换为Byte型 CCur(expression) 转换为Currency型 CDate(expression) 转换为Date型 CDbl(expression) 转换为Double型 CDec(expression) 转换为Decemal型 CInt(expression) 转换为Integer型 CLng(expression) 转换为Long型 CSng(expression) 转换为Single型 CStr(expression) 转换为String型 CVar(expression) 转换为Variant型 Val(string) 转换为数据型 Str(number) 转换为String 五时间函数 Now 返回一个 Variant (Date),根据计算机系统设置的日期和时间来指定日期和时间。 Date 返回包含系统日期的 Variant (Date)。 Time 返回一个指明当前系统时间的 Variant (Date)。 Timer

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论