




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学习基础知识第1页,共107页,2023年,2月20日,星期六数组VBA程序流程控制VBA常用语句VBA编程基础VBA概念VBA概念第2页,共107页,2023年,2月20日,星期六1-1VBA简介VBA(VisualBasicforApplication)是MicrosoftOffice系列软件的内置编程语言,其语法结构与VisualBasic编程语言互相兼容,采用的是面向对象的编程机制和可视化的编程环境。第3页,共107页,2023年,2月20日,星期六1-2面向对象程序设计的基本概念1.集合和对象
VBA中的应用程序是由许多对象组成的,如表、窗体、查询等。对象是帮助构造应用程序的元素,以特定的方式组织这些对象,就形成了应用程序。2.对象的属性、事件和方法属性属性描述了对象的自身性质其格式为:
对象名.属性=属性值第4页,共107页,2023年,2月20日,星期六1-2面向对象程序设计的基本概念事件事件是指可以发生在一个对象上且能够被该对象所识别的动作。如:单击某个命令按钮就产生该按钮的“单击”事件当某个对象发生某一事件后,就会驱动系统去执行预先编好的、与这一事件相对应的一段程序。方法
方法是系统事先设计好的,可以完成一定操作的特殊过程,是附属于对象的行为和动作。在需要使用的时候可以直接调用。其格式为: 对象名.方法名第5页,共107页,2023年,2月20日,星期六常见对象及其含义对象名含义Application代表整个Excel应用程序Window代表窗口Worksheet代表一个工作表Sheets指定的或活动工作薄中所有工作表的集合ShapeRange代表形状区域,它是文档中的一组形状PivotTable代表工作表上的数据透视图Workbook代表一个Excel工作薄Shape代表绘图层中的对象,例如自选图形Range代表某一单元格、某一行、某一列、某一区域Name代表单元格区域的自定义名Chart代表工作薄中的图表FileDialog提示文件对话框,功能和应用程序中标准“打开”和“保存”对话框类似CommandBarPopup代表命令栏上的一个弹出式控件CommandBar代表容器应用程序中的一个命令栏第6页,共107页,2023年,2月20日,星期六1-3VBA编程环境VBA中的程序与函数共有4种:一般程序(Sub)、事件程序(Event)、属性程序(Property)和函数(Function)VBA程序窗口共6种:
代码窗口、立即窗口、本地窗口、监视窗口、工程资源管理器和属性窗口在VBE环境中编写VBA代码第7页,共107页,2023年,2月20日,星期六工程窗口-选择对象属性窗口-选择对象的属性代码窗口选择事件VBE编程环境第8页,共107页,2023年,2月20日,星期六标准工具条视图MicrosoftExcel按钮:切换Excel窗口插入按钮:插入模块或过程运行子过程/用户窗体按钮:运行模块中的程序中断按钮:中断正在运行的程序重新设置按钮:结束正在运行的程序设置模式按钮:在设计模式和非设计模式之间切换工程资源管理器按钮:用于打开工程资源管理器属性窗口按钮:用于打开属性窗口对象浏览器按钮:用于打开对象浏览器Microsoft
Excel插入模块运行子过程/用户窗体设计模式中断重新设计工程资源管理器对象浏览器属性窗口第9页,共107页,2023年,2月20日,星期六新建一个窗体并添加两个命令按钮,运行窗体后,单击第一个按钮,显示一个消息框;单击第二个按钮,退出当前窗体
通过此例,体会可视化编程、面向对象、事件过程、应用方法等基本概念。第10页,共107页,2023年,2月20日,星期六数组VBA程序流程控制VBA常用语句VBA编程基础VBA概念VBA编程基础第11页,共107页,2023年,2月20日,星期六2-1常量、变量VBA使用常量、变量来存储值。用来保存在程序运行期间数据。常量:在程序运行中其存储的值不会改变。变量:在程序运行中其值可以改变。第12页,共107页,2023年,2月20日,星期六2-1-1常量在程序运行过程中,其值不会被改变的量称为常量。在VBA中有三类常量:1.直接常量如:10,20%,123.0,“AB”,“VBA程序设计”等2.符号常量3.系统常量指VBA系统预先定义好的,用户可以直接引用的量。如:acForm,acQuery,vbOk,vbRed第13页,共107页,2023年,2月20日,星期六符号常量在程序中,某个常量多次被使用,则可以使用一个符号来代替该常量,这样不仅在书写上方便,而且有效地改进了程序的可读性和可维护性。VBA中使用关键字Const
声明符号常量。其格式如下:
Const常量名[类型符号]=常数表达式如:
ConstPI#=3.1415926第14页,共107页,2023年,2月20日,星期六2-1-2变量变量是内存中的临时单元,存放在程序执行过程中产生的中间结果和最后输出结果。在程序中使用变量,就要给变量定义名称及类型,即对变量进行声明。第15页,共107页,2023年,2月20日,星期六变量命名规则1.变量名必须以字母或汉字开头,后可跟字母、汉字、数字或下划线组成(不能含有小数点和空格),长度不超过255个字符的字符串;2.不能使用VBA中的关键字;3.VBA中不区分变量名的大小写;4.变量名的最后一个字符可以是%、&、!、#、$等表示数据类型的声明符。说明:常量名的命名规则与变量名的命名规则相同第16页,共107页,2023年,2月20日,星期六2-2数据类型与变量的声明在VBA中,数据类型用来决定变量可以保存何种数据。VBA支持多种数据类型,为用户编程提供了方便。第17页,共107页,2023年,2月20日,星期六2-2-1VBA的数据类型数据类型类型声明符存储空间取值范围整型(Integer)%2-32768~32767长整型(Long)&4-2147483648~2147483647单精度浮点型(Single)!4负数:-3.402823E38~-1.401298E-45正数:1.401298E-45~3.402823E38双精度浮点型(Double)#8负数:-1.79769313486232E308~-4.94065645841247E-324正数:4.94065645841247E-324~1.79769313486232E308货币型(Currency)@8-922337203685477.5808~922337203685477.5807日期型(Date)8100年1月1日~9999年12月31日字符型(String)$0字符~65400个字符字节型(Byte)10~255逻辑型(Boolean)2True或False对象型(Object)4任何引用的对象变体型(Variant)第18页,共107页,2023年,2月20日,星期六2-2-2变量声明用Dim或Static语句显式声明局部变量格式:Dim变量名[AS类型]或Dim变量名类型符语句中的“As类型”子句是可选的。如果使用该子句,就可以定义变量的数据类型。未使用,默认变量的类型为变体型(Variant)。例如:DimiAsinteger,s表示声明了一个名为i的整型变量和一个名为s的变体型变量。第19页,共107页,2023年,2月20日,星期六关键字Dim或Static的区别Dim声明:随过程的调用而分配存贮单元,每次调用都对变量初始化;过程体结束,变量的内容自动消失,存储单元释放。Static声明:Static声明的变量,也称为静态变量。静态变量在程序运行过程中一直保留其值,即每次调用过程,变量保持原来的值。第20页,共107页,2023年,2月20日,星期六数据类型的转换函数列表函数返回类型CByteByteCBoolBooleanCIntIntegerCLngLong(长整型)CSngSingle(单精度浮点型)CDblDouble(双精度浮点型)CCurCurrency(变比整数)CDecDecimalCDateDateCStrStringCvarVariant第21页,共107页,2023年,2月20日,星期六识别数据类型的函数TypeNameSubabc()DimiAsIntegerDimstrAsStringi=10MsgBoxTypeName(i)str=CStr(i)MsgBoxTypeName(str)EndSub第22页,共107页,2023年,2月20日,星期六隐式声明变量未进行上述的声明而直接使用变量,称变量的隐式声明,采用隐式声明的变量都是变体型(Variant)。
注意:VBA中允许不事先声明而直接使用变量,可以通过语句OptionExplicit,来要求所使用的变量必须事先声明,否则VBA会发出警告信息。第23页,共107页,2023年,2月20日,星期六变量a,b,Sum都没有事先定义PrivateSubForm_Click()Sum=0a=10b=20Sum=a+bDebug.Print"Sum="&SumEndSub良好的编程习惯应该是“先声明变量,后使用变量”,这样做可以提高程序的效率,同时也使程序易于调试。VBA中可以强制显式声明,可以在窗体模块、标准模块和类模块的通用声明段中加入语句:OptionExplicit第24页,共107页,2023年,2月20日,星期六变量的初始化声明而未赋值的变量的值为:数值型变量初始化为0;字符型变量为零长度字符串;变体型变量初始化为Empty;第25页,共107页,2023年,2月20日,星期六2-3-1算术运算符第26页,共107页,2023年,2月20日,星期六2-3-2连接运算符连接运算符:&、+(字符串连接)例如:"123"+"456"结果"123456""123"&"456"结果"123456"
使用上&与+的区别:例如:"abcdef"&12345结果为"abcdef12345" "123"&456结果为"123456" "abcdef"+12345结果为出错"123"+456结果为579
第27页,共107页,2023年,2月20日,星期六2-3-3关系运算符将两个操作数进行大小比较,结果为逻辑值。注意:字符串比较,则按字符的ASCII码值从左到右一一比较,直到出现不同的字符为止。第28页,共107页,2023年,2月20日,星期六2-3-4逻辑运算符将操作数进行逻辑运算,结果是逻辑值第29页,共107页,2023年,2月20日,星期六举例例1:用人单位招聘秘书:年龄小于40岁的女性,学历专科或本科正确的VBA表达式:3〈=xAndx<=7错误的VBA表达式:3<=x<=7或3<=xOrx<=7
年龄<40,性别=“女”,(学历=“专科”,学历=“本科”)
AndAndOr例2:算术表达式:第30页,共107页,2023年,2月20日,星期六2-3-5简单的字符处理函数作用关键字OptionCompare设置字符串比较规则StrComp比较两个字符串StrConv字符串类型转换Lcase、Ucase大小写变换Space、String重复字符串Len计算字符串长度Format设置字符格式Lset、Rset重排字符串InStr、Left、Ltrim、Mid、RightRtrim、Trim处理字符串Split、Join拆分与连接字符串第31页,共107页,2023年,2月20日,星期六OptionCompare设置字符串比较规则OptionCompare{Binary|Text|Database}OptionCompareBinary:是根据字符的内部二进制表示导出的一种排序A-Z<a-z<汉字OptionCompareText:是根据系统区域确定的一种不区分大小写的一种排序(A=a)<(B=b)<(Z=z)结果:True结果:False第32页,共107页,2023年,2月20日,星期六StrComp比较两个字符串第33页,共107页,2023年,2月20日,星期六StrConv字符串类型转换常量说明vbUpperCase将字符串文字转成大写vbLowerCase将字符串文字转成小写vbProperCase将字符串中每个字的开头字母转成大写vbWide将字符串中单字节字符转成双字节字符vbNarro将字符串中双字节字符转成单字节字符vbKatakana将字符串中平假名字符转成片假名字符vbHiragana将字符串中片假名字符转成平假名字符vbUnicode根据系统的默认码页将字符串转成UnicodevbFromUnicode将字符串由Unicode转成系统的默认码页第34页,共107页,2023年,2月20日,星期六StrConv字符串类型转换(例)MsgBoxstrConv("English",vbUpperCase)&Chr(10)&strConv("English",vbLowerCase)&Chr(10)&strConv("english",vbProperCase)&Chr(10)&strConv("English",vbWide)第35页,共107页,2023年,2月20日,星期六Format格式化字符串MsgBoxFORMAT(Date,"yyyy年m月d日")&Chr(10)&FORMAT(Date,"aaaa"),vbaOKOnly,"现在是"第36页,共107页,2023年,2月20日,星期六LCase/UCase大小写转换Sub大小写转换()MsgBoxLCase("HELLOWORLD")&Chr(10)&UCase("helloworld")EndSub第37页,共107页,2023年,2月20日,星期六String/Space重复字符Sub重复字符()MsgBoxString(5,"$")&Space(3)&String(5,"*")EndSub第38页,共107页,2023年,2月20日,星期六Lset/Rset字符串往左/右对齐Sub字符左右对齐()Dimstr1,str2AsStringstr1="大连华信计算机技术股份有限公司"LSetstr1="华信培训"str2="大连华信计算机技术股份有限公司"RSetstr2="华信培训"MsgBox"["&str1&"]"&Chr(10)&"["&str2&"]"EndSub第39页,共107页,2023年,2月20日,星期六Instr返回字符出现位置Sub查找位置()MsgBoxInStr("大连华信计算机技术股份有限公司","信")EndSub第40页,共107页,2023年,2月20日,星期六Left/Mid/Right从左、中、右取值Sub取值()DimstrAsStringstr="大连华信计算机技术股份有限公司"MsgBoxLeft(str,2)&Mid(str,3,2)&Right(str,2)EndSub第41页,共107页,2023年,2月20日,星期六LTrim/RTrim/Trim去除空格Subabc()Dimstr1,str2AsStringstr1="大连"str2="华信"'MsgBoxTrim(str1&str2)&"666"MsgBoxLTrim(str1)&RTrim(str2)&"666"EndSub第42页,共107页,2023年,2月20日,星期六Like字符串相似度比较Subabc()'result=stringlikpattern'?任何单一字符'*零个或多个字符'#任何一个数字(0-9)Dimstr1AsStringstr1="abda"Ifstr1Like"*"ThenMsgBox"*相似"Ifstr1Like"a???"ThenMsgBox"?相似"If1234Like"####"ThenMsgBox"#相似"EndSub第43页,共107页,2023年,2月20日,星期六2-4表达式组成由变量、常量、函数等运算对象加上运算符、圆括号组成的式子。书写规则(1)运算符不能相邻。例a+-b是错误的。(2)乘号不能省略。例x乘以y应写成:x*y。(3)括号必须成对出现,均使用圆括号。(4)表达式从左到右在同一基准上书写,无高低。运算优先级算术运算符>连接运算符>关系运算符>逻辑运算第44页,共107页,2023年,2月20日,星期六2-5常用函数函数实际上是系统事先定义好的内部程序,用来完成特定的功能。VBA提供了大量的内部函数,供用户在编程时使用。
函数的调用形式为:函数名(参数表)常用内部函数 常用内部函数,在立即窗口练习,体会函数的功能。[请参照:VBA函数参考手册]第45页,共107页,2023年,2月20日,星期六2-6模块、函数和过程
模块是自定义的过程、函数保存的地方,也是录制的宏保存的场所。有两种基本类型的模块:类模块和标准模块。模块可以通过右键单击工程资源管理器的工程名,选择“插入-模块”来新建。新建的模块缺省的名称为“模块1”,“模块2”,建议在属性窗口内更改为有意义的名称。模块任务:(1)保存过程和函数;(2)定义模块内的私有变量或整个工程的公有变量。第46页,共107页,2023年,2月20日,星期六2-7过程过程是最基本的运行单位语法[Private|Public|Friend][Static]Subname[(arglist)]
[statements]
[ExitSub]
[statements]EndSub在以上程序中,Sub代表过程种类,表示运行指定的操作,但不返回运行结果;第47页,共107页,2023年,2月20日,星期六部分 描述Public可选的。表示所有模块的所有其它过程都可访问这个Sub过程。如果在包含OptionPrivate的模块中使用,则这个过程在该工程外是不可使用的。Private可选的。表示只有在包含其声明的模块中的其它过程可以访问该Sub过程。Friend可选的。只能在类模块中使用。表示该Sub过程在整个工程中都是可见的,但对对象实例的控制者是不可见的。Static可选的。表示在调用之间保留Sub过程的局部变量的值。Static属性对在Sub外声明的变量不会产生影响,即使过程中也使用了这些变量。name必需的。Sub的名称;遵循标准的变量命名约定。arglist可选的。代表在调用时要传递给Sub过程的参数的变量列表。多个变量则用逗号隔开。statements可选的。Sub过程中所执行的任何语句组。第48页,共107页,2023年,2月20日,星期六2-8函数函数是具有返回值的过程语法[Public|Private|Friend][Static]Functionname[(arglist)][Astype][statements][name=expression][ExitFunction][statements][name=expression]EndFunction
第49页,共107页,2023年,2月20日,星期六部分 描述Public可选的。表示所有模块的所有其它过程都可访问这个Function过程。如果是在包含OptionPrivate的模块中使用,则这个过程在该工程外是不可使用。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的返回值。第50页,共107页,2023年,2月20日,星期六函数和过程区别调用一个过程(Sub)时,必须键入过程名称以及任何需要的参数值。Call语句可有可无,如果使用它,则参数必须以括号括起来。调用函数(Function)时,为了使用函数的返回值,必须指定函数给变量,并且用括号将参数封闭起来。
第51页,共107页,2023年,2月20日,星期六数组VBA程序流程控制VBA常用语句VBA编程基础VBA概念VBA常用语句第52页,共107页,2023年,2月20日,星期六3-1VBA语句书写规则VBA代码不区分字母的大小写系统保留字自动转换每个单词的首字母大写;语句书写自由一行可书写几句语句,之间用冒号(:)分隔;一句语句可分若干行书写,用续行符(_)将语句分开。第53页,共107页,2023年,2月20日,星期六3-2VBA常用语句赋值语句:给变量、常量或对象的属性指定一个值或表达式。格式:变量名=表达式作用:将表达式的值赋值给变量名。一般用于给变量赋值或对控件设定属性值。例如:s=10Text1.Text="欢迎使用VBA"注意:虽然赋值号与关系运算符等于号都用“=”表示,VBA会根据所处的位置自动判断是何种意义的符号第54页,共107页,2023年,2月20日,星期六声明语句:命名和定义常量、变量、数组以及过程。注释语句在程序中的适当位置加上注释语句有利于程序的维护和阅读。
格式:Rem注释内容 或用单引号’注释内容第55页,共107页,2023年,2月20日,星期六数组VBA程序流程控制VBA常用语句VBA编程基础VBA概念VBA程序流程控制第56页,共107页,2023年,2月20日,星期六顺序、分支、循环结构化程序设计由顺序、分支、循环这3种基本结构所组成。语句组2语句组1TF语句组2条件语句组1FT条件语句组TF条件语句组第57页,共107页,2023年,2月20日,星期六4-1分支结构单行If语句格式:If表达式Then语句1[Else语句2]功能:If测试指定的条件,如果条件表达式为真(True),则执行Then后面的语句1,否则执行语句2(若Else子句未省略)。TF语句2条件语句1TF条件语句1第58页,共107页,2023年,2月20日,星期六PrivateSubp1()DimxAsInteger,yAsIntegerx=InputBox(“请输入x值”)Ifx>=0Theny=2*x+1Elsey=1MsgBox"y:"&yEndSub根据输入x的值,观察y的输出结果单行If语句举例第59页,共107页,2023年,2月20日,星期六
多行If语句语句组可以由一条或多条语句组成,语句组不能与Then书写在同一行,否则VBA认为是一个单行If语句,会导致Else没有匹配的If。语句“EndIf”是多行If语句的结束标志。在多行If语句中,即使省略Else子句,也要写该结束标志。省略Else子句时的多行If语句形式为:
If表达式Then语句组 EndIf第60页,共107页,2023年,2月20日,星期六例:计算分段函数单行If语句实现:
Ifx=0Theny=cos(x)-x^3+3*xIfx<>0Theny=sin(x)+sqr(x*x+1)
多行If语句实现:Ifx<>0Theny=sin(x)+sqr(x*x+1)Elsey=cos(x)-x^3+3*xEndIf第61页,共107页,2023年,2月20日,星期六If语句的嵌套If语句的嵌套是指If或Else后面的语句块中又包含If语句。
If<表达式1>Then
If<表达式11>Then…EndIf
…
EndIf第62页,共107页,2023年,2月20日,星期六
例:已知x,y,z三个数,使得x>y>z用一个IF语句和一个嵌套的IF语句实现Ifx<yThent=x:x=y:y=t
Ify<zThent=y:y=z:z=t
Ifx<yThent=x:x=y:y=tEndIf
EndIfIf语句的嵌套注意事项:书写锯齿型;If与EndIf配对第63页,共107页,2023年,2月20日,星期六If<表达式1>Then <语句块1>ElseIf<表达式2>Then <语句块2> … [Else语句块n+1]EndIfIf…Then…ElseIf语句(多分支结构)第64页,共107页,2023年,2月20日,星期六说明不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若条件都不满足,且有Else子句,则执行该语句块,否则什么也不执行。ElseIf不能写成ElseIf。第65页,共107页,2023年,2月20日,星期六例:已知百分制成绩mark,显示对应的五级制成绩下列三种方法哪些正确,哪些错误?方法一Ifmark>=90ThenPrint"优"ElseIfmark>=80ThenPrint"良"ElseIfmark>=70ThenPrint"中"ElseIfmark>=60ThenPrint"及格"ElsePrint"不及格"EndIf方法二Ifmark<60ThenPrint"不及格"ElseIfmark<70ThenPrint"及格"ElseIfmark<80ThenPrint"中"ElseIfmark<90ThenPrint"良"ElsePrint"优"EndIf方法三Ifmark>=60ThenPrint"及格"ElseIfmark>=70ThenPrint"中"ElseIfmark>=80ThenPrint"良"ElseIfmark>=90ThenPrint"优"ElsePrint"不及格"EndIf第66页,共107页,2023年,2月20日,星期六<表达式列表>:与<变量或表达式>同类型的下面四种形式之一:
表达式
例:"A"
一组枚举表达式(用逗号分隔)
2,4,6,8
表达式1To表达式2
60To100
Is关系运算符表达式
Is<60语句格式: SelectCase变量或表达式 Case表达式列表1 语句块1 Case表达式列表2 语句块2 … [CaseElse 语句块n+1] EndSelect数值型或字符串表达式SelectCase语句(情况语句)第67页,共107页,2023年,2月20日,星期六程序流程图语句块n+1语句块1语句块2语句块n条件2TF…...条件nTF条件1TF第68页,共107页,2023年,2月20日,星期六变量strC中存放一个字符,判断该字符类型第69页,共107页,2023年,2月20日,星期六例如:在输入成绩文本框中输入一个分数,单击“判断”命令按钮后,在成绩等级文本框中显示对应的成绩等级。输入的成绩在90~100分为A,80~89分为B,70~79分为C,60~69分为D,0~59分为E,否则显示出错信息。注意:根据题意,当输入的成绩不在[0,100]内时,应显示出错信息,在该范围内时,应进行分等级。判断是否为合法成绩可用If语句,而分等级最好使用SelectCase语句。第70页,共107页,2023年,2月20日,星期六条件函数IIf函数形式为:
IIf(表达式,当表达式为True时的值,当表达式为False时的值)例如:求x,y中大的数,放入max变量中。 max=IIf(x>y,x,y)第71页,共107页,2023年,2月20日,星期六循环结构
For…Next循环Do…Loop循环第72页,共107页,2023年,2月20日,星期六For…Next循环语句For…Next循环结构:将一段程序重复执行指定的次数,其中使用一个计数变量,统计执行的次数。格式:For循环变量=初值to终值[Step步长]语句块 [ExitFor] 语句块Next[循环变量]循环体第73页,共107页,2023年,2月20日,星期六循环变量得初值循环变量<=终值ExitFor语句块循环变量加步长结束False语句块True第74页,共107页,2023年,2月20日,星期六注意功能:执行For语句时,“循环变量”设为“初值”;执行到Next语句时,步长加(减)到循环变量上;再执行For语句时,若“循环变量”超过“终值”则循环结束。步长:未指定值时默认为1。若“步长”是正数或0,则“初值”应大于等于“终值”,否则,“初值”应小于等于“终值”。第75页,共107页,2023年,2月20日,星期六例:计算累加程序S=1+2+3+4….+x,并输出结果方法:接收一个累加的终值,确定一个循环变量,循环变量有2个作用(加数和循环变量),确定一个存储累加和的变量。使用循环计算,最后输出显示结果。
DimsAsinteger,xAsintegerx=InputBox("请输入累加的终值")Fori=lToxs=s+iNext思考:计算=1+3+5+7…X或2+4+6+8…X如何编写?第76页,共107页,2023年,2月20日,星期六例:计算累乘程序S=1*2*3*4…X方法:接收一个累乘的终值,确定一个循环变量,循环变量有2个作用(乘数和循环变量),确定一个存储累乘积的变量。使用循环计算,最后输出显示结果。
DimSAsinteger,iAsintegerx=InputBox("请输入累加的终值")S=1Fori=lToxS=S*iNext注意:累乘的乘数和乘积变量的初值为1。第77页,共107页,2023年,2月20日,星期六注意:出了循环,循环控制变量值的问题。例程序段:
Fori=2To13Step3循环执行次数
debug.Printi 输出i的值分别为:25811
Nextidebug.Printi出了循环输出为:i=14第78页,共107页,2023年,2月20日,星期六例:改变循环控制变量对循环的影响PrivateSubCommand1_Click()j=0Fori=1To20Step2
i=i+3j=j+1Print"第";j;"次循环i=";iNextiPrint"退出循环后i=";iEndSub正常情况:i=1,3,5,7,9,11,13,15,17,19现在:i=4,9,14,19第79页,共107页,2023年,2月20日,星期六Do…Loop循环语句形式1:
Do{While|Until}<条件>语句块[ExitDo语句块]Loop第80页,共107页,2023年,2月20日,星期六形式2:
Do
语句块[ExitDo语句块]Loop{While|Until}<条件>Do…Loop循环语句第81页,共107页,2023年,2月20日,星期六Do…Loop语句(循环结构)DoWhile…Loop语句DoUntil…Loop语句Do…LoopWhile语句Do…LoopUntil语句第82页,共107页,2023年,2月20日,星期六DoWhile…Loop语句i=1DoWhilei<=10s=s+ii=i+1Loop
当i<=10成立时,执行循环体循环变量i必须有初值防止产生死循环有可能一次也不执行循环体修改循环控制变量,改变加数值第83页,共107页,2023年,2月20日,星期六
Do…LoopWhile
i=1Dos=s+ii=i+1LoopWhilei<=10当i<=10成立时,执行循环体循环变量i必须有初值防止产生死循环至少执行一次循环体修改循环控制变量,改变加数值第84页,共107页,2023年,2月20日,星期六DoUntil…Loop
i=1DoUntili>10s=s+ii=i+1Loop
当i>10成立时,结束执行循环体循环变量i必须有初值防止产生死循环有可能一次也不执行循环体修改循环控制变量,改变加数值第85页,共107页,2023年,2月20日,星期六Do…LoopUntil
i=1Dos=s+ii=i+1LoopUntili>10当i>10成立时,结束执行循环体循环变量i必须有初值防止产生死循环至少执行一次循环体修改循环控制变量,改变加数值第86页,共107页,2023年,2月20日,星期六补充:While…Wend语句格式如下: While<条件> <循环块> Wend说明:该语句的功能与DoWhile<条件>….Loop实现的循环完全相同。第87页,共107页,2023年,2月20日,星期六注意三种循环语句:即For、Do—Loop,共同的特点是重复执行一个语句系列(循环体),不同点是控制重复次数的时机和方法不一样。第88页,共107页,2023年,2月20日,星期六数组VBA程序流程控制VBA常用语句VBA编程基础VBA概念数组第89页,共107页,2023年,2月20日,星期六5-1数组的概念数组:数组不是一种数据类型,而是一组相同类型的变量的集合。可以像使用普通变量一样使用数组中的每一个元素。使用数组的好处是用一个数组名代表逻辑上相关的一批数据,用下标表示该数组中的各个元素,可以提高处理数据的效率,缩短和简化程序。第90页,共107页,2023年,2月20日,星期六5-2数组的定义
数组不是一种数据类型,而是一组相同类型的变量的集合,数组必须先声明后使用。
两类数组:静态(定长)数组、动态(可变长)数组
1.一维数组
定义一维数组的形式:Dim数组名([下界To]上界)[As类型]
声明了数组的名、维数、大小、类型
第91页,共107页,2023年,2月20日,星期六说明:数组名的命名规则与变量的命名相同。数组的元素个数:上界-下界+1。缺省<下界>为0,若希望下标从1开始,可在模块的通用部分使用OptionBase语句将设为1。其使用格式是:
OptionBase0|1
'后面的参数只能取0或1例如:OptionBase1'将数组声明中缺省<下界>下标设为1<下界>和<上界>不能使用变量,必须是常量,常量可以是直接常量、符号常量,一般是整型常量。第92页,共107页,2023年,2月20日,星期六例:Dimmark(1to100)AsInteger例:Dima(-1to3)AsInteger声明一维数组a,包含了5个整型元素a(-1)、a(0)、a(1)、a(2)、a(3);如果省略As子句,则数组的类型为变体类型。数组中各元素在内存占一片连续的存储空间,一维数组在内存中存放的顺序是按下标大小的顺序。第93页,共107页,2023年,2月20日,星期六注意:
在定义静态数组时,每一维的元素个数必须是常数,不能是变量或表达式。
如:错误的声明,下标是变量Dimx(n)或:n=Inputbox(“输入n”)Dimx(n)AsSingle第94页,共107页,2023年,2月20日,星期六在数组声明中的下标说明了数组的整体,即每维的大小;而在程序其他地方出现的下标表示数组中的一个元素。两者写法形式相同,但意义不同。例如:Dimx(10)AsInteger
x(10)=100
表示声明了数组x,有11个数组元素对x(10)这个数组元素赋值第95页,共107页,2023年,2月20日,星期六5-3
二维数组定义二维数组的形式:Dim数组名([下界1To]上界1,下界2To]上界2)As类型例如:Dima(2,3)AsSingle
二维数组在内存的存放顺序是“先行后列”。数组a的各元素在内存中的存放顺序是: 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(2,0)→a(2,1)→a(2,2)→a(2,3)第96页,共107页,2023年,2月20日,星期六例:DimlArray(0To3,0To4)AsLong
共有4×5个元素等价于:DimlArray(3,4)AsLong第97页,共107页,2023年,2月20日,星期六5-4动态数组
动态数组指在声明数组时未给出数组的大小(省略括号中的下标),当要使用它时,随时用ReDim语句重新指出数组大小。形式如下:
ReDim数组名(下标[,下标2…])
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《供配电技术》高职机电一体化全套教学课件
- 中职高考英语一轮练习(定语从句)含答案
- 二零二五年新型建筑材料采购合同
- 二零二五年度农产品深加工产品总代理销售合同
- 二零二五年度贵金属典当担保协议书
- 二零二五年度家居建材加盟代理合同范本
- 2025版离婚协议书范本:男方出轨离婚案中子女教育协议
- 2025电脑维修服务合同(含数据恢复与安全防护)
- 二零二五年临时网络直播及视频制作劳务合同
- 二零二五版离婚协议书范本:夫妻感情破裂财产分割子女抚养责任协议书
- 福建省福州市福九联盟2024-2025学年高一下学期7月期末考试数学试卷(含答案)
- 企业环境保护工作课件
- 2024年云南省富源县人民医院公开招聘护理工作人员试题带答案详解
- 太阳能路灯设计与安装方案
- 2025年高考新课标I卷听力讲评课件-高考英语一轮复习专项
- 2025国家保安员资格考试题库及答案
- 轻量化渲染方案-洞察及研究
- 二甲基亚砜项目可行性研究报告
- 医药代表商务礼仪培训课程
- 2025年深圳中考化学试卷真题(含答案)
- 2025至2030中国游乐类主题公园行业产业运行态势及投资规划深度研究报告
评论
0/150
提交评论