学习VBA基础知识.ppt
VBAVBA基础基础(26-Nov-2226-Nov-22)数组数组VBAVBA程序流程控制程序流程控制VBAVBA常用语句常用语句VBAVBA编程基础编程基础VBAVBA概念概念VBAVBA概念概念1-1 VBA1-1 VBA简介简介 VBA(Visual Basic for Application)是MicrosoftOffice系列软件的内置编程语言,其语法结构与VisualBasic编程语言互相兼容,采用的是面向对象的编程机制和可视化的编程环境。1-2 1-2 面向对象程序设计的基本概念面向对象程序设计的基本概念1.集合和对象 VBA中的应用程序是由许多对象组成的,如表、窗体、查询等。对象是帮助构造应用程序的元素,以特定的方式组织这些对象,就形成了应用程序。2.对象的属性、事件和方法 属性 属性描述了对象的自身性 质 其格式为:对象名.属性=属性值1-2 1-2 面向对象程序设计的基本概念面向对象程序设计的基本概念事件 事件是指可以发生在一个对象上且能够被该对象所识别的动作。如:单击某个命令按钮就产生该按钮的“单击”事件当某个对象发生某一事件后,就会驱动系统去执行预先编好的、与这一事件相对应的一段程序。方法 方法是系 统事先设计好的,可以完成一定操作的特殊过程,是附属于对象的行为和动作。在需要使用的时候可以直接调用。其格式为:对象名.方法名常见对象及其含义常见对象及其含义对 象 名含 义Application代表整个Excel应用程序Window代表窗口Worksheet代表一个工作表Sheets指定的或活动工作薄中所有工作表的集合ShapeRange代表形状区域,它是文档中的一组形状PivotTable代表工作表上的 数据透视图Workbook代表一个Excel工作薄Shape代表绘图层中的对象,例如自选图形Range代表某一单元格、某一行、某一列、某一区域Name代表单元格区域的自定义名Chart代表工作薄中的图表FileDialog提示文件对话框,功能和应用程序中标准“打开”和“保存”对话框类似CommandBarPopup代表命令栏上的一个弹出式控件CommandBar代表容器应用程序中的一个命令栏1-3 VBA1-3 VBA编程环境编程环境VBA 中的程序与函数共有种:一般程序(Sub)、事件程序(Event)、属性程序(Property)和函数(Function)VBA程序窗口共种:代码窗口、立即窗口、本地窗口、监视窗口、工程资源管理器和属性窗口在VBE环境中编写VBA代码工程窗口选择对象属性窗口选择对象的属性代码窗口选择事件VBE编程环境编程环境标准工具条标准工具条视图视图 Microsoft Excel Microsoft Excel按钮:切换按钮:切换ExcelExcel窗口窗口插入按钮:插入模块或过程插入按钮:插入模块或过程运行子过程运行子过程/用户窗体按钮:运行模块中的程序用户窗体按钮:运行模块中的程序中断按钮:中断正在运行的程序中断按钮:中断正在运行的程序重新设置按钮:结束正在运行的程序重新设置按钮:结束正在运行的程序设置模式按钮:在设计模式和非设计模式之间切换设置模式按钮:在设计模式和非设计模式之间切换工程资源管理器按钮:用于打开工程资源管理器工程资源管理器按钮:用于打开工程资源管理器属性窗口按钮:用于打开属性窗口属性窗口按钮:用于打开属性窗口对象浏览器按钮:用于打开对象浏览器对象浏览器按钮:用于打开对象浏览器MicrosoftExcel插入模块运行子过程/用户窗体设计模式中断重新设计工程资源管理器 对象浏览器属性窗口 新建一个窗体并添加两个命令按钮,运行窗体后,单击第一个按钮,显示一个消息框;单击第二个按钮,退出当前窗体 通过此例,体会可视化编程、面向对象、事件过程、应用方法等基本概念。数组数组VBAVBA程序流程控制程序流程控制VBAVBA常用语句常用语句VBAVBA编程基础编程基础VBAVBA概念概念VBAVBA编程基础编程基础2-12-1常量、变量常量、变量VBA使用常量、变量来存储值。用来保存在程序运行期间数据。常量:在程序运行中其存储的值不会改变。变量:在程序运行中其值可以改变。2-1-12-1-1常量常量在程序运行过程中,其值不会被改变的量称为常量。在VBA中有三类常量:1.直接常量 如:10,20%,123.0,“AB”,“VBA程序设计”等2.符号常量3.系统常量 指VBA系统预先定义好的,用户可以直接引用的量。如:acForm,acQuery,vbOk,vbRed 符号常量符号常量 在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。VBA中使用关键字Const 声明符号常量。其格式如下:Const 常量名 类型符号=常数表达式如:Const PI#=3.14159262-1-22-1-2变量变量 变量是内存中的临时单元,存放在程序执行过程中产生的中间结果和最后输出结果。在程序中使用变量,就要给变量定义名称及类型,即对变量进行声明。变量命名规则变量命名规则1.变量名必须以字母或汉字开头,后可跟字母、汉字、数字或下划线组成(不能含有小数点和空格),长度 不超过255个字符的字符串;2.不能使用VBA中的关键字;3.VBA中不区分变量名的大小写;4.变量名的最后一个字符可以是%、&、!、#、$等表示 数据类型的声明符。说明:常量名的命名规则与变量名的命名规则相同2-2 2-2 数据类型与变量的声明数据类型与变量的声明在VBA中,数据类型用来决定变量可以保存何种数据。VBA支持多种数据类型,为用户编程提供了方便。2-2-1 VBA2-2-1 VBA的数据类型的数据类型数据类型数据类型数据类型数据类型类型声明符类型声明符类型声明符类型声明符存储空间存储空间存储空间存储空间 取值范围取值范围取值范围取值范围整型(整型(IntegerInteger)%2 2-32768-327683276732767长整型(长整型(LongLong)&4 4-2147483648-214748364821474836472147483647单精度浮点型单精度浮点型(SingleSingle)!4 4负数:负数:-3.402823E38-3.402823E38-1.401298E-45-1.401298E-45正数:正数:1.401298E-45 1.401298E-453.402823E383.402823E38双精度浮点型双精度浮点型(DoubleDouble)#8 8负数:负数:-1.79769313486232E308-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 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)2-2-22-2-2变量声明变量声明用Dim或Static语句显式声明局部变量 格式:Dim 变量名 AS 类型 或 Dim 变量名类型符 语句中的“As 类型”子句是可选的。如果使用该子句,就可以定义变量的数据类型。未使用,默认变量的类型为变体型(Variant)。例如:Dim i As integer,s 表示声明了一个名为i的整型变量和一个名为s的变体型变量。关键字关键字DimDim或或StaticStatic的区别的区别Dim 声明:随过程的调用而分配存贮单元,每次调用都对变量初始化;过程体结束,变量的内容自动消失,存储单元释放。Static 声明:Static 声明的变量,也称为静态变量。静态变量在程序运行过程中一直保留其值,即每次调用过程,变量保持原来的值。数据类型的转换函数列表数据类型的转换函数列表函数函数返回类型返回类型CByteByteCBoolBooleanCIntIntegerCLngLong(长整型)CSngSingle(单精度浮点型)CDblDouble(双精度浮点型)CCurCurrency(变比整数)CDecDecimalCDateDateCStrStringCvarVariant识别数据类型的函数识别数据类型的函数TypeNameTypeNameSub abc()Dim i As Integer Dim str As String i=10 MsgBox TypeName(i)str=CStr(i)MsgBox TypeName(str)End Sub隐式声明变量隐式声明变量 未进行上述的声明而直接使用变量,称变量的隐式声明,采用隐式声明的变量都是变体型(Variant)。注意:VBA中允许不事先声明而直接使用变量,可以通过语句Option Explicit,来要求所使用的变量必须事先声明,否则VBA会发出警告信息。变量变量a,b,Suma,b,Sum都没有事先定义都没有事先定义Private Sub Form_Click()Sum=0 a=10 b=20 Sum=a+b Debug.Print Sum=&SumEnd Sub 良好的编程习惯应该是“先声明变量,后使用变量”,这样做可以提高程序的效率,同时也使程序易于调试。VBA中可以强制显式声明,可以在窗体模块、标准模块和类模块的通用声明段中加入语句:Option Explicit变量的初始化变量的初始化声明而未赋值的变量的值为:n数值型变量初始化为0;n字符型变量为零长度字符串;n变体型变量初始化为 Empty;2-3-12-3-1算术运算符算术运算符2-3-22-3-2连接运算符连接运算符 连接运算符:、+(字符串连接)例如:123+456 结果 123456 123&456 结果 123456 使用上 与+的区别:例如:abcdef&12345 结果为 abcdef12345 123&456 结果为 123456 abcdef+12345 结果为 出错 123+456 结果为 579 2-3-32-3-3关系运算符关系运算符将两个操作数进行大小比较,结果为逻辑值。注意:字符串比较,则按字符的ASCII码值从左到右一一 比较,直到出现不同的字符为止。2-3-42-3-4逻辑运算符逻辑运算符将操作数进行逻辑运算,结果是逻辑值举例举例例1:用人单位招聘秘书:年龄小于40岁的女性,学历专科或本科 正确的VBA表达式:3=x And x=7 错误的VBA表达式:3=x=7 或 3=x Or x=7 年龄40,性别=“女”,(学历=“专科”,学历=“本科”)And And Or例2:算术表达式:2-3-52-3-5简单的字符处理函数简单的字符处理函数作作 用用关关 键键 字字Option Compare设置字符串比较规则StrComp比较两个字符串StrConv字符串类型转换Lcase、Ucase大小写变换Space、String重复字符串Len计算字符串长度Format设置字符格式Lset、Rset重排字符串InStr、Left、Ltrim、Mid、RightRtrim、Trim处理字符串Split、Join拆分与连接字符串Option CompareOption Compare设置字符串比较规则设置字符串比较规则Option Compare Binary|Text|DatabaseOption Compare Binary:是根据字符的内部二进制表示导出的一种排序A-Za-z汉字Option Compare Text:是根据系统区域确定的一种不区分大小写的一种排序(A=a)(B=b)连接运算符关系运算符逻辑运算2-5 2-5 常用函数常用函数 函数实际上是系统事先定义好的内部程序,用来完成特定的功能。VBA提供了大量的内部函数,供用户在编程时使用。函数的调用形式为:函数名(参数表)常用内部函数常用内部函数,在立即窗口练习,体会函数的功能。请参照:VBA函数参考手册2-6 2-6 模块、函数和过程模块、函数和过程 模块是自定义的过程、函数保存的地方,也是录制的宏保存的场所。有两种基本类型的模块:类模块和标准模块。模块可以通过右键单击工程资源管理器的工程名,选择“插入模块”来新建。新建的模块缺省的名称为“模块1”,“模块2”,建议在属性窗口内更改为有意义的名称。模块任务:(1)保存过程和函数;(2)定义模块内的私有变量或整个工程的公有变量。2-7 2-7 过程过程过程是最基本的运行单位语法Private|Public|Friend Static Sub name(arglist)statementsExit SubstatementsEnd Sub在以上程序中,Sub 代表过程种类,表示运行指定的操作,但不返回运行结果;部分部分 描述描述Public可选的。表示所有模块的所有其它过程都可访问这个 Sub 过程。如果在包含 Option Private 的模块中使用,则这个过程在该工程外是不可使用的。Private可选的。表示只有在包含其声明的模块中的其它过程可以访问该 Sub 过程。Friend可选的。只能在类模块中使用。表示该 Sub 过程在整个工程中都是可见的,但对对象实例的控制者是不可见的。Static可选的。表示在调用之间保留 Sub 过程的局部变量的值。Static 属性对在 Sub 外声明的变量不会产生影响,即使过程中也使用了这些变量。name必需的。Sub 的名称;遵循标准的变量命名约定。arglist可选的。代表在调用时要传递给 Sub 过程的参数的变量列表。多个变量则用逗号隔开。statements可选的。Sub 过程中所执行的任何语句组。2-8 2-8 函数函数函数是具有返回值的过程语法Public|Private|Friend Static Function name(arglist)As type statements name=expression Exit Function statements name=expressionEnd Function 部分部分 描述描述Public可选的。表示所有模块的所有其它过程都可访问这个 Function 过程。如果是在包含 Option Private 的模块中使用,则这个过程在该工程外是不可使用。Private可选的。表示只有包含其声明的模块的其它过程可以访问该 Function 过程。Friend可选的。只能在类模块中使用。表示该 Function 过程在整个工程中都是可见的,但对于对象实例的控制者是不可见的。Static可选的。表示在调用之间将保留 Function 过程的局部变量值。Static 属性对在该 Function 外声明的变量不会产生影响,即使过程中也使用了这些变量。name必需的。Function 的名称;遵循标准的变量命名约定。arglist可选的。代表在调用时要传递给 Function 过程的参数变量列表。多个变量应用逗号隔开。type可选的。Function 过程的返回值的数据类型,可以是 Byte、Boolean、Integer、Long、Currency、Single、Double、Decimal(目前尚不支持)、Date、String(除定长)、Object、Variant或任何用户定义类型。statements可选的。在 Function 过程中执行的任何语句组。expression可选的。Function 的返回值。函数函数和和过程过程区别区别v调用一个过程(Sub)时,必须键入过程名称以及任何需要的参数值。Call语句可有可无,如果使用它,则参数必须以括号括起来。v调用函数(Function)时,为了使用函数的返回值,必须指定函数给变量,并且用括号将参数封闭起来。数组数组VBAVBA程序流程控制程序流程控制VBAVBA常用语句常用语句VBAVBA编程基础编程基础VBAVBA概念概念VBAVBA常用语句常用语句3-1 VBA3-1 VBA语句书写规则语句书写规则nVBA代码不区分字母的大小写 系统保留字自动转换每个单词的首字母大写;n语句书写自由 一行可书写几句语句,之间用冒号(:)分隔;一句语句可分若干行书写,用续行符(_)将语句分开。3-2 VBA3-2 VBA常用语句常用语句赋值语句:给变量、常量或对象的属性指定一个值或表达式。格式:变量名表达式作用:将表达式的值赋值给变量名。一般用于给变量赋值或对控件设定属性值。例如:s=10 Text1.Text 欢迎使用VBA注意:虽然赋值号与关系运算符等于号都用“=”表示,VBA会 根据所处的位置自动判断是何种意义的符号声明语句:命名和定义常量、变量、数组以及过程。注释语句 在程序中的适当位置加上注释语句有利于程序的维护和阅读。格式:Rem 注释内容 或用单引号 注释内容数组数组VBAVBA程序流程控制程序流程控制VBAVBA常用语句常用语句VBAVBA编程基础编程基础VBAVBA概念概念VBAVBA程序流程控制程序流程控制顺序、分支、循环顺序、分支、循环结构化程序设计由结构化程序设计由结构化程序设计由结构化程序设计由顺序、分支、循环顺序、分支、循环顺序、分支、循环顺序、分支、循环这这这这3 3种基本结构所组成。种基本结构所组成。种基本结构所组成。种基本结构所组成。语句组语句组2语句组语句组1TF语句组语句组2条件条件语句组语句组1FT条件条件语句组语句组TF条件条件语句组语句组4-14-1分支结构分支结构单行 If 语句格式:If 表达式 Then 语句1 Else 语句2功能:If 测试指定的条件,如果条件表达式为真 (True),则执行Then 后面的语句1,否则 执行语句2(若Else子句未省略)。TF语句语句2条件条件语句语句1TF条件条件语句语句1Private Sub p1()Dim x As Integer,y As Integer x=InputBox(“请输入x值”)If x=0 Then y=2*x+1 Else y=1 MsgBox y:&yEnd Sub根据输入根据输入根据输入根据输入x x x x的值,观察的值,观察的值,观察的值,观察y y y y的输出结果的输出结果的输出结果的输出结果单行单行IfIf语句举例语句举例多行多行IfIf语句语句 语句组可以由一条或多条语句组成,语句组不能与Then书写在同一行,否则VBA认为是一个单行If语句,会导致Else没有匹配的If。语句“End If”是多行If语句的结束标志。在多行If语句中,即使省略Else子句,也要写该结束标志。省略Else子句时的多行If语句形式为:If 表达式 Then 语句组 End If例:计算分段函数例:计算分段函数单行单行单行单行IfIfIfIf语句实现:语句实现:语句实现:语句实现:If x=0 Then y=cos(x)If x=0 Then y=cos(x)x3+3*x x3+3*x If x0 Then y=sin(x)+sqr(x*x+1)If x0 Then y=sin(x)+sqr(x*x+1)多行多行多行多行IfIfIfIf语句实现:语句实现:语句实现:语句实现:If x0 Then y=sin(x)+sqr(x*x+1)Else y=cos(x)x3+3*x End IfIfIf语句的嵌套语句的嵌套IfIf语句的嵌套是指语句的嵌套是指语句的嵌套是指语句的嵌套是指IfIf或或或或ElseElse后面的语句块中又包含后面的语句块中又包含后面的语句块中又包含后面的语句块中又包含IfIf语句。语句。语句。语句。If If Then1 Then If If Then11 Then End If End If End If End If 例:已知例:已知x x,y y,z z三个数,使得三个数,使得xyzxyz 用一个用一个IFIF语句和一个嵌套的语句和一个嵌套的IFIF语句实现语句实现If xy Then t=x:x=y:y=t If yz Then t=y:y=z:z=t If xy Then t=x:x=y:y=t End If End IfIf If语句的嵌套注意事项:书写锯齿型;语句的嵌套注意事项:书写锯齿型;语句的嵌套注意事项:书写锯齿型;语句的嵌套注意事项:书写锯齿型;If If 与与与与End IfEnd If配对配对配对配对If If Then1 Then 1 ElseIf ElseIf Then2 Then 2 Else Else 语句块语句块语句块语句块 n+1 n+1 End If End IfIfThenElseIfIfThenElseIf语句语句(多分支结构多分支结构)说明说明不管有几个分支,依次判断,当某条件满足,执行相应不管有几个分支,依次判断,当某条件满足,执行相应不管有几个分支,依次判断,当某条件满足,执行相应不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若条件都不满足,且有的语句,其余分支不再执行;若条件都不满足,且有的语句,其余分支不再执行;若条件都不满足,且有的语句,其余分支不再执行;若条件都不满足,且有ElseElse子句,则执行该语句块,否则什么也不执行。子句,则执行该语句块,否则什么也不执行。子句,则执行该语句块,否则什么也不执行。子句,则执行该语句块,否则什么也不执行。ElseIfElseIf不能写成不能写成不能写成不能写成 Else If Else If。例:已知百分制成绩例:已知百分制成绩例:已知百分制成绩例:已知百分制成绩markmarkmarkmark,显示对应的五级制成,显示对应的五级制成,显示对应的五级制成,显示对应的五级制成绩下列三种方法哪些正确,哪些错误?绩下列三种方法哪些正确,哪些错误?绩下列三种方法哪些正确,哪些错误?绩下列三种方法哪些正确,哪些错误?方法一方法一If mark=90 ThenIf mark=90 Then Print Print 优优 ElseIf mark=80 ThenElseIf mark=80 Then Print Print 良良 ElseIf mark=70 ThenElseIf mark=70 Then Print Print 中中 ElseIf mark=60 ThenElseIf mark=60 Then Print Print 及格及格 ElseElse Print Print 不及格不及格 End IfEnd If方法二方法二If mark 60 ThenIf mark 60 Then Print Print 不及格不及格 ElseIf ElseIf mark mark 70 70 ThenThen Print Print 及格及格 ElseIf ElseIf mark mark 80 80 ThenThen Print Print 中中 ElseIf ElseIf mark mark =60 ThenIf mark=60 Then Print Print 及格及格 ElseIf mark=70 ThenElseIf mark=70 Then Print Print 中中 ElseIf mark=80 ThenElseIf mark=80 Then Print Print 良良 ElseIf mark=90 ThenElseIf mark=90 Then Print Print 优优 ElseElse Print Print 不及格不及格 End IfEnd If:与同类型的下面四种形式之一:表达式 例:A 一组枚举表达式(用逗号分隔)2,4,6,8 表达式1 To 表达式2 60 To 100 Is 关系运算符表达式 Is yx yx yx y,x x x x,y y y y)循环结构循环结构 For NextFor Next循环循环循环循环 Do Loop Do Loop循环循环循环循环ForNextForNext循环语句循环语句ForNextForNext循环结构:循环结构:循环结构:循环结构:将一段程序重复执行指定的次数,将一段程序重复执行指定的次数,将一段程序重复执行指定的次数,将一段程序重复执行指定的次数,其中使用一个计数变量,统计执行的次数。其中使用一个计数变量,统计执行的次数。其中使用一个计数变量,统计执行的次数。其中使用一个计数变量,统计执行的次数。格式:格式:格式:格式:For For 循环变量初值循环变量初值循环变量初值循环变量初值 to to 终值终值终值终值 Step Step 步长步长步长步长 语句块语句块语句块语句块 Exit For Exit For 语句块语句块语句块语句块 Next Next 循环变量循环变量循环变量循环变量 循环体循环体循环体循环体循环变量得初值循环变量得初值循环变量得初值循环变量得初值循环变量循环变量循环变量循环变量=终值终值终值终值Exit ForExit For语句块语句块语句块语句块循环变量加步长循环变量加步长循环变量加步长循环变量加步长结束结束False语句块语句块语句块语句块True注意注意功能:执行For语句时,“循环变量”设为“初值”;执行到Next语句时,步长加(减)到循环变量上;再执行For语句时,若“循环变量”超过“终值”则循环结束。步长:未指定值时默认为1。若“步长”是正数或0,则“初值”应大于等于“终值”,否则,“初值”应小于等于“终值”。例:计算累加程序例:计算累加程序 S=1+2+3+4.+x,S=1+2+3+4.+x,并输出结果并输出结果方法:接收一个累加的终值,确定一个循环变量,循环变量方法:接收一个累加的终值,确定一个循环变量,循环变量方法:接收一个累加的终值,确定一个循环变量,循环变量方法:接收一个累加的终值,确定一个循环变量,循环变量有有有有2 2个作用(加数和循环变量),确定一个存储累加和的变个作用(加数和循环变量),确定一个存储累加和的变个作用(加数和循环变量),确定一个存储累加和的变个作用(加数和循环变量),确定一个存储累加和的变量。使用循环计算,最后输出显示结果。量。使用循环计算,最后输出显示结果。量。使用循环计算,最后输出显示结果。量。使用循环计算,最后输出显示结果。Dim s As integer,x As integerDim s As integer,x As integer x=InputBox(x=InputBox(请输入累加的终值请输入累加的终值请输入累加的终值请输入累加的终值)For i=l To x For i=l To x s=s+i s=s+i Next Next思考:思考:思考:思考:计算计算计算计算=1+3+5+7X=1+3+5+7X 或或或或 2+4+6+8X 2+4+6+8X 如何编写?如何编写?如何编写?如何编写?例:计算累乘程序例:计算累乘程序 S=1*2*3*4X S=1*2*3*4X方法:接收一个累乘的终值,确定一个循环变量,循环变量有方法:接收一个累乘的终值,确定一个循环变量,循环变量有方法:接收一个累乘的终值,确定一个循环变量,循环变量有方法:接收一个累乘的终值,确定一个循环变量,循环变量有2 2个作用(乘数和循环变量),确定一个存储累乘积的变量。个作用(乘数和循环变量),确定一个存储累乘积的变量。个作用(乘数和循环变量),确定一个存储累乘积的变量。个作用(乘数和循环变量),确定一个存储累乘积的变量。使用循环计算,最后输出显示结果。使用循环计算,最后输出显示结果。使用循环计算,最后输出显示结果。使用循环计算,最后输出显示结果。Dim S As integer,i As integerDim S As integer,i As integer x=InputBox(x=InputBox(请输入累加的终值请输入累加的终值请输入累加的终值请输入累加的终值)S=1 S=1 For i=l To x For i=l To x S=S*i S=S*i Next Next注意:注意:注意:注意:累乘的乘数和乘积变量的初值为累乘的乘数和乘积变量的初值为累乘的乘数和乘积变量的初值为累乘的乘数和乘积变量的初值为1 1。注意:注意:注意:注意:出了循环,循环控制变量值的问题。出了循环,循环控制变量值的问题。出了循环,循环控制变量值的问题。出了循环,循环控制变量值的问题。例程序段:例程序段:例程序段:例程序段:For i=2 To 13 Step 3 For i=2 To 13 Step 3 循环执行次数循环执行次数循环执行次数循环执行次数 debug.Print i debug.Print i 输出输出输出输出 i i的值分别为的值分别为的值分别为的值分别为:2 5 8 11:2 5 8 11 Next i Next i debug.Print i debug.Print i 出了循环输出为出了循环输出为出了循环输出为出了循环输出为:i=14:i=14例例:改变循环控制变量对循环的影响改变循环控制变量对循环的影响Private Sub Command1_Click()Private Sub Command1_Click()j=0 j=0 For i=1 To 20 Step 2 For i=1 To 20 Step 2 i=i+3i=i+3 j=j+1 j=j+1 Print Print 第第第第;j;j;次循环次循环次循环次循环i=;ii=;i Next i Next i Print Print 退出循环后退出循环后退出循环后退出循环后i=;ii=;i End Sub End Sub正常情况:正常情况:正常情况:正常情况:i=1,3,5,7,9,11,13,15,17,19i=1,3,5,7,9,11,13,15,17,19现在:现在:现在:现在:i=4,9,14,19i=4,9,14,19DoLoopDoLoop循环语句循环语句形式形式形式形式1 1 1 1:Do While|Until Do While|Until Do While|Until Do While|Until 语句块语句块语句块语句块 Exit Do Exit Do Exit Do Exit Do 语句块语句块语句块语句块 Loop Loop Loop Loop形式形式形式形式2 2 2 2:DoDoDoDo 语句块语句块语句块语句块 Exit Do Exit Do Exit Do Exit Do 语句块语句块语句块语句块 Loop While|Until Loop While|Until Loop While|Until Loop While|Until DoLoopDoLoop循环语句循环语句DoLoopDoLoop语句语句(循环结构循环结构)Do While Loop语句Do Until Loop语句Do Loop While语句Do Loop Until语句Do While LoopDo While Loop语句语句i=1i=1i=1i=1 Do While i=10 Do While i=10 Do While i=10 Do While i=10 s=s+i s=s+i s=s+i s=s+i i=i+1 i=i+1 i=i+1 i=i+1 Loop Loop Loop Loop n n当当当当i=10i=10i=10i=10成立时,执行循环体成立时,执行循环体成立时,执行循环体成立时,执行循环体n n循环变量循环变量循环变量循环变量i i i i必须有初值必须有初值必须有初值必须有初值n n防止产生死循环防止产生死循环防止产生死循环防止产生死循环n n有可能一次也不执行循环体有可能一次也不执行循环体有可能一次也不执行循环体有可能一次也不执行循环体修改循环控制变修改循环控制变修改循环控制变修改循环控制变量,改变加数值量,改变加数值量,改变加数值量,改变加数值 Do Loop WhileDo Loop While i=1i=1i=1i=1 Do Do Do Do s=s+i s=s+i s=s+i s=s+i i=i+1 i=i+1 i=i+1 i=i+1 Loop While i=10 Loop While i=10 Loop While i=10 Loop While i=10n n当当当当i=10i=10i=10i10 Do Until i10 Do Until i10 Do Until i10 s=s+i s=s+i s=s+i s=s+i i=i+1 i=i+1 i=i+1 i=i+1 Loop Loop Loop Loop n n当当当当i10i10i10i10成立时,结束执行循环体成立时,结束执行循环体成立时,结束执行循环体成立时,结束执行循环体n n循环变量循环变量循环变量循环变量i i i i必须有初值必须有初值必须有初值必须有初值n n防止产生死循环防止产生死循环防止产生死循环防止产生死循环n n有可能一次也不执行循环体有可能一次也不执行循环体有可能一次也不执行循环体有可能一次也不执行循环体修改循环控制变修改循环控制变修改循环控制变修改循环控制变量,改变加数值量,改变加数值量,改变加数值量,改变加数值Do Loop UntilDo Loop Until i=1i=1i=1i=1 Do Do Do Do s=s+i s=s+i s=s+i s=s+i i=i+1 i=i+1 i=i+1 i=i+1 Loop Until i10 Loop Until i10 Loop Until i10 Loop Until i10当当当当i10i10i10i10成立时,结束执行循环体成立时,结束执行循环体成立时,结束执行循环体成立时,结束执行循环体循环变量循环变量循环变量循环变量i i i i必须有初值必须有初值必须有初值必须有初值防止产生死循环防止产生死循环防止产生死循环防止产生死循环至少执行一次循环体至少执行一次循环体至少执行一次循环体至少执行一次循环体修改循环控制变修改循环控制变修改循环控制变修改循环控制变量,改变加数值量,改变加数值量,改变加数值量,改变加数值补充:补充:WhileWendWhileWend语句语句格式如下:格式如下:格式如下:格式如下:While While WendWend说明:说明:说明:说明:该语句的功能与该语句的功能与该语句的功能与该语句的功能与Do While Do While.Loop.Loop实现实现实现实现的循环完全相同。的循环完全相同。的循环完全相同。的循环完全相同。注意注意 三种循环语句:即三种循环语句:即三种循环语句:即三种循环语句:即For For For For、DoLoopDoLoopDoLoopDoLoop,共同的特点是重,共同的特点是重,共同的特点是重,共同的特点是重复执行一个语句系列复执行一个语句系列复执行一个语句系列复执行一个语句系列(循环体循环体循环体循环体),不同点是控制重复次数,不同点是控制重复次数,不同点是控制重复次数,不同点是控制重复次数的时机和方法不一样。的时机和方法不一样。的时机和方法不一样。的时机和方法不一样。数组数组VBAVBA程序流程控制程序流程控制VBAVBA常用语句常用语句VBAVBA编程基础编程基础VBAVBA概念概念数组数组5-1 5-1