《VBA编程入门学习教案》由会员分享,可在线阅读,更多相关《VBA编程入门学习教案(86页珍藏版)》请在金锄头文库上搜索。
1、会计学1VBA编程入门编程入门(r mn)第一页,共86页。目录(ml)序 -3VBA编程环境-7VBA编程基础-12VBA常用语句-32VBA流程控制-35VBA数组-57VBA过程(guchng)-69VBA操作数据库-76第1页/共85页第二页,共86页。VBA是什么?1VBA有什么作用?2怎么样才能学好 VBA?3序言(xyn)第2页/共85页第三页,共86页。VBA是什么是什么(shn me)?简单的说VBA是一种(y zhn)编程语言,它可以支持在Office系列软件中命令和功能的编写。Excel VBA则是以Microsoft Excel为开发对象的VBA语言。如运行下面的VBA
2、代码就可以在单元格A1中输入100。Sub T1() Range(a1) = 100End Sub第3页/共85页第四页,共86页。VBA有什么有什么(shn me)作用作用效率效率完成重复性的劳动 如果你需要经常重复的做某个工作,那么可以编写一个VBA代码来帮你快速完成。克服克服克服excel自身功能的局限性 excel提供的功能有效,提供的函数也有效。而我们利用VBA则可以自定义功能、自定义函数。应用应用编制自已的应用软件 即使你不是专业的编程人员,你也可以利用VBA+Excel编写出你想要的应用软件第4页/共85页第五页,共86页。怎么才能怎么才能怎么才能怎么才能(cinng)(cinn
3、g)(cinng)(cinng)学好学好学好学好VBAVBAVBAVBA6、独立编写VBA小软件1、身边备有几本VBA参考书5、多帮助别人,多总结4、多练习、多思考、多提问2、常用录制宏功能3、多查看帮助文件Text第5页/共85页第六页,共86页。 进入进入进入进入VBAVBAVBAVBA编程环境编程环境编程环境编程环境(hunjng)(hunjng)(hunjng)(hunjng) VBAVBAVBAVBA窗口的组成窗口的组成窗口的组成窗口的组成 VBA VBA VBA VBA窗口由工具栏、工程资源管理器窗口、窗口由工具栏、工程资源管理器窗口、窗口由工具栏、工程资源管理器窗口、窗口由工具栏
4、、工程资源管理器窗口、 属性窗口、代码窗口和立即窗口组成。属性窗口、代码窗口和立即窗口组成。属性窗口、代码窗口和立即窗口组成。属性窗口、代码窗口和立即窗口组成。 新建模块进行新建模块进行新建模块进行新建模块进行VBAVBAVBAVBA编程编程编程编程 V-1 VBA编程环境(hunjng)第6页/共85页第七页,共86页。 进入进入(jnr)VBA(jnr)VBA编程环境(编程环境(Excel2007Excel2007)如果如果(rgu)(rgu)是在是在Office 2007Office 2007中,若你没看到中,若你没看到“ “开发工开发工具具” ”选项卡的话,先到选项中打开它。选项卡的话
5、,先到选项中打开它。 第7页/共85页第八页,共86页。工程窗口选择对象选择事件属性窗口选择对象的属性代码窗口 VBE编程环境(hunjng) 然后在“开发工具”选项卡的“代码(di m)”区域里按”Visual Basic”按键,就可以打开同样的界面第8页/共85页第九页,共86页。 标准标准(biozhn)(biozhn)工具条工具条视图Microsoft Excel按钮:切换Excel 2007窗口插入(ch r)按钮:插入(ch r)模块或过程运行子过程/用户窗体按钮:运行模块中的程序中断按钮:中断正在运行的程序重新设置按钮:结束正在运行的程序设置模式按钮:在设计模式和非设计模式之间切
6、换工程资源管理器按钮:用于打开工程资源管理器属性窗口按钮:用于打开属性窗口对象浏览器按钮:用于打开对象浏览器Microsoft Excel插入模块运行子过程/用户窗体设计模式中断重新设计 工程资源管理器对象浏览器属性窗口第9页/共85页第十页,共86页。 新建模块新建模块新建模块新建模块(m kui)(m kui)(m kui)(m kui) 在在在在“工程工程工程工程”视图中,右键单击视图中,右键单击视图中,右键单击视图中,右键单击”ThisWorkbook”ThisWorkbook”ThisWorkbook”ThisWorkbook”,然后在,然后在,然后在,然后在菜单中选菜单中选菜单中选
7、菜单中选“插入插入插入插入”-“”-“”-“”-“模块模块模块模块”,就会在主界面出现一片空白,就会在主界面出现一片空白,就会在主界面出现一片空白,就会在主界面出现一片空白(kngbi)(kngbi)(kngbi)(kngbi)(如图(如图(如图(如图Module1Module1Module1Module1)。即可在空白)。即可在空白)。即可在空白)。即可在空白(kngbi)(kngbi)(kngbi)(kngbi)进行进行进行进行VBAVBAVBAVBA编程。编程。编程。编程。第10页/共85页第十一页,共86页。 V-2-1 V-2-1 V-2-1 V-2-1 常量常量常量常量(chngl
8、ing)(chngling)(chngling)(chngling)、变量变量变量变量常量:在程序运行中其存储的值不会常量:在程序运行中其存储的值不会(b hu)(b hu)改变。改变。变量:在程序运行中其值可以改变。变量:在程序运行中其值可以改变。 VBA VBA使用常量、变量使用常量、变量(binling)(binling)来存储值。用来来存储值。用来保存在程序运行期间数据。保存在程序运行期间数据。 V-2 VBAV-2 VBA编程基础编程基础第11页/共85页第十二页,共86页。常量 在程序运行过程中,其值不会被改变的量称为常量。在VBA中有三类常量: 直接常量 如:10,20%, ,
9、“AB”,“VBA程序设计”等 符号常量系统常量 指VBA系统预先定义好的,用户(yngh)可以直接引用的量。 如:acForm,acQuery,vbOk,vbRed 第12页/共85页第十三页,共86页。变量是内存中的临时单元,存放变量是内存中的临时单元,存放(cnfng)(cnfng)在程序执行过在程序执行过程中产生的中间结果和最后输出结果。程中产生的中间结果和最后输出结果。在程序中使用变量,就要给变量定义名称及类型,即对在程序中使用变量,就要给变量定义名称及类型,即对变量进行声明。变量进行声明。变量变量(binli(binling)ng)第13页/共85页第十四页,共86页。 变量命名规
10、则变量命名规则变量名必须以字母或汉字开头,后可跟字母、变量名必须以字母或汉字开头,后可跟字母、汉字、数字或下划线组成(不能含有小数点汉字、数字或下划线组成(不能含有小数点和空格),长度不超过和空格),长度不超过255255个字符的字符串;个字符的字符串;不能使用不能使用VBAVBA中的关键字;中的关键字;VBAVBA中不区分中不区分(qfn)(qfn)变量名的大小写;变量名的大小写;变量名的最后一个字符可以是变量名的最后一个字符可以是% %、& &、!、!、# #、$ $等表示数据类型的声明符。等表示数据类型的声明符。说明:常量名的命名说明:常量名的命名(mng mng)(mng mng)规则
11、与变量名的规则与变量名的命名命名(mng mng)(mng mng)规则相同规则相同第14页/共85页第十五页,共86页。V-2-2 V-2-2 数据类型与变量数据类型与变量(binling)(binling)的声明的声明 在在VBAVBA中,数据类型用来决定变量可以保存中,数据类型用来决定变量可以保存(bocn)(bocn)何种数据。何种数据。VBAVBA支持多种数据类型,为用户支持多种数据类型,为用户编程提供了方便。编程提供了方便。 第15页/共85页第十六页,共86页。 VBAVBA的数据类型的数据类型数据类型数据类型类型声明符类型声明符存储空间存储空间 取值范围取值范围整型(整型(In
12、tegerInteger)% %2 2-32768-327683276732767长整型(长整型(LongLong)& &4 4-2147483648-214748364821474836472147483647单精度浮点型单精度浮点型(SingleSingle)!4 4负数:负数:-3.402823E38-3.402823E38-1.401298E-45-1.401298E-45正数:正数: 1.401298E-451.401298E-453.402823E383.402823E38双精度浮点型双精度浮点型(DoubleDouble)# #8 8负数:负数:-1.79769313486232
13、E308-1.79769313486232E308- -4.94065645841247E-3244.94065645841247E-324正数:正数:4.94065645841247E-3244.94065645841247E-3241.79769313486232E3081.79769313486232E308货币型货币型(Currency)(Currency) 8 8-922337203685477.5808-922337203685477.5808922337203685477.5807922337203685477.5807日期型日期型(Date)(Date)8 8100100年年1
14、 1月月1 1日日99999999年年1212月月3131日日字符型字符型(String)(String)$ $0 0字符字符6540065400个字符个字符字节型字节型(Byte)(Byte)1 10 0255255逻辑型逻辑型(Boolean)(Boolean)2 2TrueTrue或或FalseFalse对象型对象型(Object)(Object)4 4任何引用的对象任何引用的对象变体型变体型(Variant)(Variant)第16页/共85页第十七页,共86页。变量声明变量声明用用Dim| StaticDim| Static语句显式声明局部变量语句显式声明局部变量 格式:格式:Dim
15、 Dim 变量名变量名 AS AS 类型类型 或或 Dim Dim 变量名类型符变量名类型符 语句中的语句中的“As “As 类型类型”子句是可选的。子句是可选的。如果使用如果使用(shyng)(shyng)该子句,就可以定义该子句,就可以定义变量的数据类型。未使用变量的数据类型。未使用(shyng)(shyng),默,默认变量的类型为变体型(认变量的类型为变体型(VariantVariant)。)。例如:例如:Dim i As integer, sDim i As integer, s 表示声明了一个名为表示声明了一个名为i i的整型变量和的整型变量和一个名为一个名为s s的变体型变量。的变
16、体型变量。第17页/共85页第十八页,共86页。关键字关键字DimDim或或StaticStatic的区别:的区别:Dim Dim 声明声明(shngmng)(shngmng):随过程的调用而分配存贮单:随过程的调用而分配存贮单元,每次调用都对变量初始化;过程体结束,变量的元,每次调用都对变量初始化;过程体结束,变量的内容自动消失,存储单元释放。内容自动消失,存储单元释放。Static Static 声明声明(shngmng)(shngmng):Static Static 声明声明(shngmng)(shngmng)的变量,也称为静态变量。静态变量在程序运行过程的变量,也称为静态变量。静态变量
17、在程序运行过程中一直保留其值,即每次调用过程,变量保持原来的中一直保留其值,即每次调用过程,变量保持原来的值。值。 第18页/共85页第十九页,共86页。 隐式声明变量隐式声明变量隐式声明变量隐式声明变量 未进行上述的声明而直接使用变量,称未进行上述的声明而直接使用变量,称未进行上述的声明而直接使用变量,称未进行上述的声明而直接使用变量,称变量的隐式声明。采用隐式声明的变量都是变变量的隐式声明。采用隐式声明的变量都是变变量的隐式声明。采用隐式声明的变量都是变变量的隐式声明。采用隐式声明的变量都是变体型(体型(体型(体型(Variant Variant Variant Variant )。)。)
18、。)。 注意注意注意注意: : : : VBA VBA VBA VBA中允许不事先中允许不事先中允许不事先中允许不事先(shxin)(shxin)(shxin)(shxin)声明而直接使用声明而直接使用声明而直接使用声明而直接使用变量,可以通过语句变量,可以通过语句变量,可以通过语句变量,可以通过语句 Option Explicit Option Explicit Option Explicit Option Explicit,来要,来要,来要,来要求所使用的变量必须事先求所使用的变量必须事先求所使用的变量必须事先求所使用的变量必须事先(shxin)(shxin)(shxin)(shxin)声
19、明,否则声明,否则声明,否则声明,否则VBAVBAVBAVBA会发出警告信息。会发出警告信息。会发出警告信息。会发出警告信息。第19页/共85页第二十页,共86页。下下下下面面面面是是是是一一一一个个个个简简简简单单单单的的的的程程程程序序序序,其其其其使使使使用用用用的的的的变变变变量量量量a, a, a, a, b, b, b, b, SumSumSumSum都都都都没有事先没有事先没有事先没有事先(shxin)(shxin)(shxin)(shxin)定义。定义。定义。定义。Private Sub Form_Click()Private Sub Form_Click()Private S
20、ub Form_Click()Private Sub Form_Click() Sum = 0 Sum = 0 Sum = 0 Sum = 0 a = 10 a = 10 a = 10 a = 10 b = 20 b = 20 b = 20 b = 20 Sum = a + b Sum = a + b Sum = a + b Sum = a + b Print Sum=; Sum Print Sum=; Sum Print Sum=; Sum Print Sum=; SumEnd Sub End Sub End Sub End Sub 良好的编程习惯良好的编程习惯 (xgun)(xgun) 应
21、该是应该是 “先声明变量,后使用变量先声明变量,后使用变量 ”,这样做可以提高程序的效率,同时也使程序易于调试。,这样做可以提高程序的效率,同时也使程序易于调试。VBA VBA 中可以强制显式声明,可以在窗体模块、标准模块和类模块的通用声明段中加入语句:中可以强制显式声明,可以在窗体模块、标准模块和类模块的通用声明段中加入语句:Option ExplicitOption Explicit第20页/共85页第二十一页,共86页。声明而未赋值的变量的值为:声明而未赋值的变量的值为:数值数值(shz)(shz)型变量初始化为型变量初始化为0 0;字符型变量为零长度字符串;字符型变量为零长度字符串;变
22、体型变量初始化为变体型变量初始化为 Empty Empty。 变量变量(binling)(binling)的初始化的初始化第21页/共85页第二十二页,共86页。V-2-3 V-2-3 运算符和表达式运算符和表达式 运算符运算符运算符运算符 算术算术算术算术(sunsh)(sunsh)(sunsh)(sunsh)运算符运算符运算符运算符第22页/共85页第二十三页,共86页。例如:例如:123 + 456 123 + 456 结果结果 123456 123456 123 & 456 123 & 456 结果结果 123456 123456 使用使用(shyng)(shyng)上上 与与+ +的
23、区别:的区别: 例如:例如: abcdef & 12345 abcdef & 12345 结果为结果为 abcdef12345 abcdef12345 123 & 456 123 & 456 结果为结果为 123456 123456 abcdef +12345 abcdef +12345 结果为结果为 出错出错 123 + 456 123 + 456 结果为结果为 579 579 连接连接(linji)(linji)运算符:运算符: 、+ +(字符串连(字符串连接接(linji)(linji))第23页/共85页第二十四页,共86页。 将两个操作数进行大小比较,结果为逻辑值。 注意:字符串比较
24、,则按字符的ASCII码值从左到右一一比较,直到出现(chxin)不同的字符为止。 关系关系(gun x)(gun x)运算符运算符第24页/共85页第二十五页,共86页。将操作数进行将操作数进行将操作数进行将操作数进行(jnxng)(jnxng)(jnxng)(jnxng)逻辑运算,结果是逻辑值逻辑运算,结果是逻辑值逻辑运算,结果是逻辑值逻辑运算,结果是逻辑值 逻辑逻辑(lu j)(lu j)运算符运算符第25页/共85页第二十六页,共86页。vv组成组成组成组成vv 由变量、常量、函数等运算对象加上运算符、由变量、常量、函数等运算对象加上运算符、由变量、常量、函数等运算对象加上运算符、由变
25、量、常量、函数等运算对象加上运算符、圆括号组成的式子。圆括号组成的式子。圆括号组成的式子。圆括号组成的式子。vv书写书写书写书写(shxi)(shxi)(shxi)(shxi)规则规则规则规则vv (1) (1) (1) (1) 运算符不能相邻。例运算符不能相邻。例运算符不能相邻。例运算符不能相邻。例a+ -ba+ -ba+ -ba+ -b是错误的。是错误的。是错误的。是错误的。vv (2) (2) (2) (2) 乘号不能省略。例乘号不能省略。例乘号不能省略。例乘号不能省略。例x x x x 乘以乘以乘以乘以y y y y 应写成:应写成:应写成:应写成:x*yx*yx*yx*y。vv (3
26、) (3) (3) (3) 括号必须成对出现,均使用圆括号。括号必须成对出现,均使用圆括号。括号必须成对出现,均使用圆括号。括号必须成对出现,均使用圆括号。vv (4) (4) (4) (4) 表达式从左到右在同一基准上书写表达式从左到右在同一基准上书写表达式从左到右在同一基准上书写表达式从左到右在同一基准上书写(shxi)(shxi)(shxi)(shxi),无高低。,无高低。,无高低。,无高低。vv运算优先级运算优先级运算优先级运算优先级vv 算术运算符算术运算符算术运算符算术运算符 连接运算符连接运算符连接运算符连接运算符 关系运算符关系运算符关系运算符关系运算符 逻辑运算逻辑运算逻辑运
27、算逻辑运算 表达式表达式第26页/共85页第二十七页,共86页。例例1 1:用人单位招聘秘书:用人单位招聘秘书(msh)(msh):年龄小于:年龄小于4040岁的女性,学历专科或本科,岁的女性,学历专科或本科, 年龄年龄4040,性别,性别=“=“女女”,( (学历学历=“=“专科专科”,学历,学历=“=“本科本科”)”) And And Or And And Or例例2 2:算术表达式:算术表达式: 正确正确(zhngqu)(zhngqu)的的VBAVBA表达式:表达式: 3 3=x And x =7=x And x =7 错误的错误的VBAVBA表达式:表达式: 3=x=7 3=x=7 或
28、或 3=x Or x=7 3=x Or x=7 考虑:若分别写成:考虑:若分别写成:年龄年龄40 And 40 And 性别性别= = 女女 And ( And (学历学历(xul)= (xul)= 专科专科 And And 学历学历(xul)= (xul)= 本科本科)年龄年龄40 Or = 0 Then y = 2 * x + 1 If x = 0 Then y = 2 * x + 1 MsgBox y: & y MsgBox y: & yEnd SubEnd SubPrivate Sub p1( ) Dim x As Integer, y As Integer x = InputBox(
29、“请输入(shr)x值”) If x = 0 Then y = 2 * x + 1 Else y = 1 MsgBox y: & yEnd Sub根据输入根据输入x x的值,观察的值,观察(gunch)y(gunch)y的输的输出结果出结果第36页/共85页第三十七页,共86页。 多行多行多行多行 If If If If 语句语句语句语句(yj)(yj)(yj)(yj) 格式:格式:格式:格式:If If If If 表达式表达式表达式表达式 Then Then Then Then 语句语句语句语句(yj)(yj)(yj)(yj)组组组组1 1 1 1 Else Else Else Else
30、语句语句语句语句(yj)(yj)(yj)(yj)组组组组2222 End If End If End If End If第37页/共85页第三十八页,共86页。 多行多行IfIf语句的执行过程是:如果语句的执行过程是:如果“表达式表达式”的值为真,的值为真,则执行语句组则执行语句组1 1;否则执行语句组;否则执行语句组2 2。当执行完语句组。当执行完语句组1 1或语句组或语句组2 2后,程序流程跳转到语句后,程序流程跳转到语句End IfEnd If的后面。的后面。 语句组可以语句组可以(ky)(ky)由一条或多条语句组成,语句组不由一条或多条语句组成,语句组不能与能与ThenThen书写在同
31、一行,否则书写在同一行,否则VBAVBA认为是一个单行认为是一个单行IfIf语语句,会导致句,会导致ElseElse没有匹配的没有匹配的IfIf。 语句语句“End If”“End If”是多行是多行IfIf语句的结束标志。在多行语句的结束标志。在多行IfIf语句中,即使省略语句中,即使省略ElseElse子句,也要写该结束标志。省略子句,也要写该结束标志。省略ElseElse子句时的多行子句时的多行IfIf语句形式为:语句形式为: If If 表达式表达式 Then Then 语句组语句组 End If End If第38页/共85页第三十九页,共86页。 例:计算例:计算(j (j sun
32、)sun)分段函数分段函数单行单行IfIf语句语句(yj)(yj)实现:实现: If x=0 Then y=cos(x) If x=0 Then y=cos(x)x3+3*x x3+3*x If x0 Then If x0 Then y=sin(x)+sqr (x*x+1) y=sin(x)+sqr (x*x+1) 多行多行IfIf语句语句(yj)(yj)实现:实现:If x0 ThenIf x0 Then y=sin(x)+sqr y=sin(x)+sqr (x*x+1)(x*x+1) Else Else y=cos(x) y=cos(x)x3+3*x x3+3*x End If End I
33、f第39页/共85页第四十页,共86页。If语句的嵌套If语句的嵌套是指If或Else后面(hu mian)的语句块中又包含If语句。 If Then If Then End If End If 第40页/共85页第四十一页,共86页。 例:已知例:已知x x,y y,z z三个数,使得三个数,使得xyzxyz 用一个用一个(y )IF(y )IF语句和一个语句和一个(y )(y )嵌套的嵌套的IFIF语句实现语句实现If xy Then t=x: x=y: y=t If yz ThenIf yz Then t=y: y=z: z=t t=y: y=z: z=t If xy Then If x
34、y Then t=x: x=y: y=t t=x: x=y: y=t End If End If End IfEnd IfIfIf语句的嵌套注意事项:书写语句的嵌套注意事项:书写(shxi)(shxi)锯齿型;锯齿型; If If 与与End IfEnd If配对配对第41页/共85页第四十二页,共86页。 IfThenElseIfIfThenElseIfIfThenElseIfIfThenElseIf语句语句语句语句( ( ( (多分支多分支多分支多分支(fnzh)(fnzh)(fnzh)(fnzh)结结结结构构构构) ) ) ) If If If If Then1 Then1 Then1
35、Then 111 ElseIf ElseIf ElseIf ElseIf Then2 Then2 Then2 Then 222 Else Else Else Else 语句块语句块语句块语句块 n+1 n+1 n+1 n+1 End If End If End If End If第42页/共85页第四十三页,共86页。 不管有几个分支,依次判断,当某条件满足,不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若条执行相应的语句,其余分支不再执行;若条件都不满足,且有件都不满足,且有ElseElse子句,则执行该语句子句,则执行该语句块,否则块,否则(fuz)(fuz)什
36、么也不执行。什么也不执行。 ElseIfElseIf不能写成不能写成 Else If Else If。说明说明(shum(shumng)ng):第43页/共85页第四十四页,共86页。例:已知百分制成绩例:已知百分制成绩(chngj)mark(chngj)mark,显示对应的五级,显示对应的五级制成绩制成绩(chngj)(chngj) 下列三种方法哪些正确,哪些错误?下列三种方法哪些正确,哪些错误?第44页/共85页第四十五页,共86页。循环(xnhun)结构 For Next循环(xnhun) Do Loop循环(xnhun)第45页/共85页第四十六页,共86页。 ForNextForNe
37、xt循环结构:将一段程序重复执行循环结构:将一段程序重复执行(zhxng)(zhxng)指定的次数,其中使用一个计数变量,指定的次数,其中使用一个计数变量,统计执行统计执行(zhxng)(zhxng)的次数。的次数。 格式:格式: For For 循环变量初值循环变量初值 toto 终值终值 Step Step 步长步长 语句块语句块 Exit For Exit For 语句块语句块 Next Next 循环变量循环变量 ForNextForNext循环循环(xnhun)(xnhun)语句语句 循环体循环体第46页/共85页第四十七页,共86页。 循环变量循环变量 = = 终值终值 语句块语句
38、块 Exit ForExit For 语句块语句块 循环变量加步长循环变量加步长 T T F F 循环变量得初值循环变量得初值 第47页/共85页第四十八页,共86页。 功功 能能 : 执执 行行 ForFor语语 句句 时时 , “循循 环环 变变 量量(binling)”(binling)”设设为为“初初值值”;执执行行到到NextNext语语句句时时,步步长长加加(减减)到到循循环环变变量量(binling)(binling)上上;再再执执行行ForFor语语句句时时,若若“循循环环变变量量(binling)”(binling)”超超过过“终值终值”则循环结束。则循环结束。 步长:未指定
39、值时默认为步长:未指定值时默认为1 1。 若若“步步长长”是是正正数数或或0 0,则则“初初值值”应应大大于于等等于于“终终值值”,否否则则,“初初值值”应应小小于于等等于于“终终值值”。第48页/共85页第四十九页,共86页。例:计算累加程序(chngx) S=1+2+3+4.+x,并输出结果。方法:接收一个累加的终值,确定一个循环变量,循环变量有2个作用(加数和循环变量),确定一个存储累加和的变量。使用循环计算,最后输出显示结果。 Dim s As integer, x As integer x = InputBox(请输入累加的终值) For x = l To x s = s + x N
40、ext思考:计算=1+3+5+7X 或 2+4+6+8X 如何编写?第49页/共85页第五十页,共86页。DoLoopDoLoop语句语句( (循环循环(xnhun)(xnhun)结结构构) ) Do While LoopDo While Loop语句语句(yj)(yj) Do Until LoopDo Until Loop语句语句(yj)(yj) Do Loop WhileDo Loop While语句语句(yj)(yj) Do Loop UntilDo Loop Until语句语句(yj)(yj)第50页/共85页第五十一页,共86页。 Do While Loop语句(yj) i=1 i=
41、1 Do While i=10 Do While i=10 s=s+i s=s+i i=i+1 i=i+1 Loop Loop 当当i=10i=10成立时,执行循环体成立时,执行循环体循环变量循环变量(binling)i(binling)i必须有初必须有初值值防止产生死循环防止产生死循环有可能一次也不执行循环体有可能一次也不执行循环体修改循环修改循环(xnhun)(xnhun)控制变控制变量,改变加数值量,改变加数值第51页/共85页第五十二页,共86页。 Do Loop While Do Loop While i=1 i=1 Do Do s=s+i s=s+i i=i+1 i=i+1 Loo
42、p While i=10 Loop While i=10当当i=10i10 Do Until i10 s=s+i s=s+i i=i+1 i=i+1 Loop Loop 当当i10i10成立时,结束执行循成立时,结束执行循环体环体循环变量循环变量i i必须有初值必须有初值防止产生防止产生(chnshng)(chnshng)死循环死循环有可能一次也不执行循环体有可能一次也不执行循环体修改修改(xigi)(xigi)循循环控制变量,改环控制变量,改变加数值变加数值第53页/共85页第五十四页,共86页。 Do Loop Until Do Loop Until i=1 i=1 Do Do s=s+i
43、 s=s+i i=i+1 i=i+1 Loop Until i10 Loop Until i10当当i10i10成立时,结束执行循环成立时,结束执行循环(xnhun)(xnhun)体体循环循环(xnhun)(xnhun)变量变量i i必须有初必须有初值值防止产生死循环防止产生死循环(xnhun)(xnhun)至少执行一次循环至少执行一次循环(xnhun)(xnhun)体体修改循环修改循环(xnhun)(xnhun)控制变控制变量,改变加数值量,改变加数值第54页/共85页第五十五页,共86页。 三种循环语句:即三种循环语句:即三种循环语句:即三种循环语句:即For For For For 、D
44、oLoopDoLoopDoLoopDoLoop,共同,共同,共同,共同的特点的特点的特点的特点(tdin)(tdin)(tdin)(tdin)是重复执行一个语句系列是重复执行一个语句系列是重复执行一个语句系列是重复执行一个语句系列( ( ( (循环体循环体循环体循环体) ) ) ),不同点是控制重复次数的时机,不同点是控制重复次数的时机,不同点是控制重复次数的时机,不同点是控制重复次数的时机和方法不一样。和方法不一样。和方法不一样。和方法不一样。第55页/共85页第五十六页,共86页。 数组:数组不是一种数据类型,而是一组相同数组:数组不是一种数据类型,而是一组相同类型的变量的集合。可以像使用
45、类型的变量的集合。可以像使用(shyng)(shyng)普普通变量一通变量一样使用样使用(shyng)(shyng)数组中的每一个元素。数组中的每一个元素。 使用使用(shyng)(shyng)数组的好处是用一个数组的好处是用一个 数组名数组名代表逻辑上相关的一批数据,用下标表示该数代表逻辑上相关的一批数据,用下标表示该数组中的各个元素,可以提高处理数据的效率,组中的各个元素,可以提高处理数据的效率,缩短和简化程序。缩短和简化程序。 V-5 V-5 数组第56页/共85页第五十七页,共86页。 数组不是一种数据类型,而是一组相同类型的变量的数组不是一种数据类型,而是一组相同类型的变量的数组不是
46、一种数据类型,而是一组相同类型的变量的数组不是一种数据类型,而是一组相同类型的变量的集合,数组必须先声明后使用。集合,数组必须先声明后使用。集合,数组必须先声明后使用。集合,数组必须先声明后使用。 两类数组:两类数组:两类数组:两类数组: 静态静态静态静态( ( ( (定长定长定长定长) ) ) )数组、动态数组、动态数组、动态数组、动态( ( ( (可变长可变长可变长可变长) ) ) )数组数组数组数组 1. 1. 1. 1.一维数组一维数组一维数组一维数组 定义一维数组的形式定义一维数组的形式定义一维数组的形式定义一维数组的形式(xngsh)(xngsh)(xngsh)(xngsh): D
47、im Dim Dim Dim 数组名数组名数组名数组名(下界下界下界下界 ToToToTo 上界上界上界上界) As ) As ) As ) As 类型类型类型类型 声明了数组的名、维数、大小、类型声明了数组的名、维数、大小、类型声明了数组的名、维数、大小、类型声明了数组的名、维数、大小、类型 V-5-1 V-5-1 数组的定义数组的定义(dngy)(dngy)第57页/共85页第五十八页,共86页。说明:说明:数组名的命名规则与变量的命名相同。数组名的命名规则与变量的命名相同。数组的元素个数:上界数组的元素个数:上界- - - -下界下界+1+1+1+1。缺缺省省 为为0 0 0 0,若若希
48、希望望下下标标从从1 1 1 1开开始始,可可在在模模块块的的通通用用部部分分使使用用Option Option Option Option BaseBaseBaseBase语语句句将将设设为为1 1 1 1。其使用格式是:。其使用格式是: Option Option Option Option Base Base Base Base 0|1 0|1 0|1 0|1 后后面面的的参参数数只只能能取取0 0 0 0或或1 1 1 1例如:例如: Option Option Option Option Base Base Base Base 1 1 1 1 将将数数组组声声明明中中缺缺省省 下标设
49、为下标设为1 1 1 1下下界界 和和 不不能能使使用用变变量量,必必须须(bx)(bx)(bx)(bx)是是常常量量,常常量量可可以以是是直直接接常常量量、符符号号常常量量,一般是整型常量。一般是整型常量。第58页/共85页第五十九页,共86页。 如如果果省省略略(shngl)As(shngl)As(shngl)As(shngl)As子子句句,则则数数组组的的类类型型为为变体类型。变体类型。 数数组组中中各各元元素素在在内内存存占占一一片片连连续续的的存存储储空空间间,一一维维数数组组在在内内存存中中存存放放的的顺顺序序是是按按下下标标大大小小的的顺顺序。序。例:Dim mark(1 to
50、100) As Integer例:例:Dim a(-1 Dim a(-1 toto 3) As Integer 3) As Integer声明一维数组声明一维数组a a,包含,包含(bohn)(bohn)了了5 5个整型元素个整型元素a(-a(-1)1)、 a(0) a(0) 、a(1) a(1) 、a(2) a(2) 、a(3)a(3);第59页/共85页第六十页,共86页。 在定义静态数组时,每一维的元素个数必须在定义静态数组时,每一维的元素个数必须 是常数,不能是变量或表达式。是常数,不能是变量或表达式。 如:错误的声明如:错误的声明(shngmng)(shngmng),下标是变量,下标
51、是变量 Dim x(n) Dim x(n) 或:或: n =Inputbox(“ n =Inputbox(“输入输入n ” n ” ) Dim x(n) As Single Dim x(n) As Single 注意(zh y):第60页/共85页第六十一页,共86页。 在数组声明中的下标说明了数组的整体在数组声明中的下标说明了数组的整体(zhngt)(zhngt),即每维的大小;而在程序其他地方,即每维的大小;而在程序其他地方出现的下标表示数组中的一个元素。两者写法形出现的下标表示数组中的一个元素。两者写法形式相同,但意义不同。式相同,但意义不同。 例如:例如:Dim x(10) As In
52、teger Dim x(10) As Integer x(10)=100 x(10)=100 表示声明表示声明(shngmng)(shngmng)了数组了数组x x,有,有1111个数组元素个数组元素对对x(10)x(10)这个这个(zh ge)(zh ge)数组元数组元素赋值素赋值第61页/共85页第六十二页,共86页。定义二维数组的形式定义二维数组的形式(xngsh)(xngsh):Dim Dim 数组名数组名(下界下界1 1 ToTo 上界上界1 1,下界,下界2 2 ToTo 上界上界2) As 2) As 类类型型例如:例如:Dim a(2,3) As Single Dim a(2,
53、3) As Single 二维数组在内存二维数组在内存(ni cn)(ni cn)的存放顺序是的存放顺序是“先行后列先行后列”。 数组数组a a的各元素在内存的各元素在内存(ni cn)(ni cn)中的存放顺序是:中的存放顺序是:a(0,0)a(0,1)a(0,2)a(0,3)a(0,0)a(0,1)a(0,2)a(0,3)a(1,0)a(1,1)a(1,2) a(1,3)a(1,0)a(1,1)a(1,2) a(1,3)a(2,0)a (2,1)a(2,2)a(2,3) a(2,0)a (2,1)a(2,2)a(2,3) 2. 2.二维数组二维数组第62页/共85页第六十三页,共86页。例
54、:例:Dim lArray( 0 Dim lArray( 0 ToTo 3 3, 0 0 ToTo 4) As Long 4) As Long 共有共有 45 45个元素个元素(yun s)(yun s)等价于等价于: Dim lArray(3: Dim lArray(3,4) As Long 4) As Long 第63页/共85页第六十四页,共86页。 一维数组元素一维数组元素(yun s)(yun s)的引用的引用使用形式:数组名使用形式:数组名( (下标下标) ) 其中:下标可以是常量、整型变量其中:下标可以是常量、整型变量(binling)(binling)或表达式。或表达式。例如:
55、设有下面的数组例如:设有下面的数组A(10) A(10) 、B(10) As IntegerB(10) As Integer 则下面的语句都是正确的。则下面的语句都是正确的。 A(1)=B(2)+B(1)+5 A(1)=B(2)+B(1)+5 取数组元素运算取数组元素运算 A(i)=B(i) A(i)=B(i) 下标使用变量下标使用变量(binling)(binling) A(i+2) = B(i+1) A(i+2) = B(i+1) 下标使用表达式下标使用表达式注意:引用数组时不能下标越界注意:引用数组时不能下标越界 V-5-2 数组的基本操作1.1.数组元素数组元素(yun s)(yun
56、s)的引用的引用第64页/共85页第六十五页,共86页。引用二维数组的形式:数组名(下标1,下标2) 下标1指定(zhdng)元素在二维表中所在的行,下标2指定(zhdng)元素在二维表中所在的列。例如:例如: a(1,2)=10 a(1,2)=10 a(i+2,j) a(i+2,j)a(2,3)*2 a(2,3)*2 在程序中常常通过二重循环在程序中常常通过二重循环(xnhun)(xnhun)来操作使用来操作使用二维数组元素。二维数组元素。 第65页/共85页第六十六页,共86页。数组引用数组引用(ynyng)(ynyng)实例:实例:第66页/共85页第六十七页,共86页。 通过通过(tn
57、ggu)(tnggu)循环给数组元素的初值循环给数组元素的初值 For i = 1 For i = 1 ToTo 10 A 10 A数组的每个元素值为数组的每个元素值为1 1 A(i)=1 A(i)=1 Next i Next i 数组的输入数组的输入( (通过通过(tnggu)InputBox( )(tnggu)InputBox( )函数函数) ) For i = 1 For i = 1 ToTo 4 4 For j = 1 For j = 1 ToTo 5 5 sc(i, j) = InputBox( sc(i, j) = InputBox(输入输入sc( &i & , & sc( &i
58、& , & j & ) j & ) 的值的值) ) Next j Next j Next i Next i2.2.数组元素数组元素(yun s)(yun s)的输入的输入第67页/共85页第六十八页,共86页。 V-6 VBA过程(guchng) 过程是构成程序的一个模块,往往用来(yn li)完成一个相对独立的功能。过程可以使程序更清晰、更具结构性。VBA 具有四种过程:Sub 过程、Function 函数、Property 属性过程和Event 事件过程。第68页/共85页第六十九页,共86页。 Sub过程执行一些有用的任务但是不返回(fnhu)任何值,它们以关键字Sub开头并以关键字En
59、d Sub结束。如下例: V-6-1 Sub过程(guchng)Sub main() Msgbox(“Hello!”)End Sub第一行Sub表示过程的开始,main为过程名;第二行是过程的主体(zht),调用函数Msgbox(),输 出”Hello!”;最后End Sub表示过程 的结束。第69页/共85页第七十页,共86页。Sub 过程的参数有两种传递方式:按值传递(ByVal)和按地址(dzh)传递(ByRef)。如下例:Sub password (ByVal x as integer, ByRef y as integer) If y=100 then y=x+y else y=x-
60、y x=x+100End sub 1 Sub过程(guchng)的参数传递在上例中,过程password每次执行时需要向其传递两参数(x,y),否则该过程不能执行。在传递x与y参数时,x不影响(yngxing)过程password外部x的值,而y则对过程外的y值产生影响(yngxing)。第70页/共85页第七十一页,共86页。 2 Sub过程(guchng)的调用调用(dioyng)过程有两种方式: 1. Call 过程名(参数1, 参数2) ; 2. 过程名 参数1, 参数2如下例:Sub main() Call password(10,20) password 30,40End Sub方
61、式1方式2注意:调用Sub过程(guchng)也是在过程(guchng)中进行的第71页/共85页第七十二页,共86页。 V-6-2 Function函数(hnsh)Function函数实际是实现一种(y zhn)映射,它通过一定的映射规则,完成运算并返回结果。 它们以关键字Function开头并以关键字End Function结束。如下例:Functionpassword(ByValxasinteger)asbooleanifx=150thenpassword=trueelsepassword=falseEndFunction 函数(hnsh)password返回一个布尔值第72页/共85页
62、第七十三页,共86页。Function函数的两各调用方式: 1.作为一个表达式放在=右端 ; 2.作为参数(cnsh)使用;如下例:Sub main() Dim i As Integer i = getResult(20) Debug.Print i i = getResult(30) + i Debug.Print iEnd SubFunction getResult(ByVal i As Integer) As Integer Dim j As Integer getResult = 0 For j = 1 To i Step 1 getResult = getResult + j Nex
63、t jEnd Function作为表达式作为参数第73页/共85页第七十四页,共86页。V-6-3Property 属性(shxng)过程和Event 事件过程 这是VB 在对象功能上添加的两个过程,与对象特征密切相关,也是VBA 比较重要组成,技术比较复杂,可以(ky)参考相关书籍。第74页/共85页第七十五页,共86页。V-7 简单介绍(jisho)VBA操作SQL Server数据库 这一节介绍的是利用ADO的Connection对象来连接数据库,从面达到操作SQL Server的目的。 首先要说的是ADO是什么?ADO的全称是:Microsoft ActiveX Data Object
64、s ,它使您的客户端应用程序能够(nnggu)通过 OLE DB 提供者访问和操作数据库服务器中的数据。它的主要优点是易于使用、速度快、内存支出低和占用磁盘空间少。第75页/共85页第七十六页,共86页。V-7-1 建立对ADO对象(duxing)库的引用 要操作ADO中的对象的话,首先就得创建对ADO对象库的引用。1. 在VB编辑器窗口,选择工具|引用以打开引用对话框。该对话框列出了你电脑上所有可用的类型库2. 在清单上找到Microsoft Active Data Objects 2.8 Library,并勾选上它表示版本,可选)3. 关闭引用对话框 一旦创建了对ADO类型库的引用,你就可
65、以使用(shyng)对象浏览器来查看该应用软件的对象,属性和方法了。如下图:第76页/共85页第七十七页,共86页。添加ADO类型库引用第77页/共85页第七十八页,共86页。查看(chkn)ADO类中的对象左键单击第78页/共85页第七十九页,共86页。V-7-2 实例介绍(jisho)操作SQL Server 下例程序(chngx)是从SQL Server中查询数据,并且使查询出的数据填充到Workbook 的sheet1中。再为数据库中的表作出更新操作。如下:第79页/共85页第八十页,共86页。Sub FillData() Dim conn As New ADODB.Connectio
66、n Dim rs As New ADODB.Recordset Dim CnStr As String Dim Sql As String Sql = select * from ao_cn.hcc__region CnStr = Provider=SQLOLEDB;Data Source=IPaddress; “ _ & “UID=xxxxxx;pwd=xxxxx” CnStr = Provider=SQLOLEDB;Data Source=IPaddress; “ _ & “Integrated Security=SSPI conn.Open CnStr rs.Open Sql, conn
67、, 1 Sheet1.A3.CopyFromRecordset rs conn.Execute (update tablename set column=xxxx) rs.Close conn.Close Set rs=Nothing Set conn = NothingEnd Sub1-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-第80页/共85页第八十一页,共86页。注释: 行1:开始过程FillData 行2:定义(dngy)连接conn 行3:定义(dngy)数据库记录集rs 行4:定义(dngy)字符串CnStr 行5:定义(dngy)
68、字符串Sql 行6:给Sql赋值(一数据库中的查询语句) 行7,8:给CnStr赋值(连接数据库的必须SQL Server验证) 行9,10:另一种Windows验证连接数据库 行11:按CnStr验证打开数据库连接 行12:按Sql语句在数据库中查询,并读取记录传递给rs 行13:rs中的数据从sheet1中的A3单元格开始填充 行14:执行更新操作 行15:关闭rs记录 行16:关闭连接conn 行17:释放rs在内存中的空间 行18:释放conn在内存中的空间 行19:结束过程FillData;第81页/共85页第八十二页,共86页。数据库连接(linji)验证: CnStr = Pro
69、vider=SQLOLEDB;Data Source=IPaddress; “ _ & “UID=xxxxxx;pwd=xxxxx”指定用于连接的提供者的名称指定数据库服务器IP地址指定登录数据库的用户名指定登录数据库的密码CnStr = Provider=SQLOLEDB;Data Source=IPaddress; “ _ & “Integrated Security=SSPI指定是否采用Windows验证(ynzhng)连接数据库,可以设置为True, False, Yes, No ,SSPI)SSPI是Security Support Provider Interface(Micros
70、oft安全支持提供器接口),在这里可以(ky)代替True第82页/共85页第八十三页,共86页。操作(cozu)从数据库中提取的数据: rs.Open Sql, conn, 1 Sheet1.A3.CopyFromRecordset rs打开rs数据集,并读取库中数据传递给rs。1表示只读复制rs中的数据到sheet1以下简单介绍rs的几种常用用法: 1. rs.RecordCount 表示rs中 行数 2. rs.Fields.Count 表示rs中列数 3. rs.Fields(0).Name 表示rs中第一列名(rs列号索引(suyn)从0开始) 4. rs(0) 表示rs指针所在行的
71、第一列数据 5. rs.MoveNext 表示向下移动指针 6. rs.MoveFirst 表示指针移至第行第83页/共85页第八十四页,共86页。第84页/共85页第八十五页,共86页。内容(nirng)总结会计学。插入按钮:插入模块或过程。运行子过程/用户窗体按钮:运行模块中的程序。中断按钮:中断正在(zhngzi)运行的程序。设置模式按钮:在设计模式和非设计模式之间切换。Dim 声明:随过程的调用而分配存贮单元,每次调用都对变量初始化。标题:对话框标题。执行到Next语句时,步长加(减)到循环变量上。它们以关键字Function开头并以关键字End Function结束。Thank You第八十六页,共86页。