1、VBA编程入门目录序 -3VBA编程环境-7VBA编程基础-12VBA常用语句-32VBA流程控制-35VBA数组-57VBA过程-69VBA操作数据库-76VBA是什么?1VBA有什么作用?2怎么样才能学好VBA?3序言VBAVBA是什么?是什么?简单的说VBA是一种编程语言,它可以支持在Office系列软件中命令和功能的编写。Excel VBA则是以Microsoft Excel为开发对象的VBA语言。如运行下面的VBA代码就可以在单元格A1中输入100。Sub T1()Range(a1)=100End SubVBAVBA有什么作用有什么作用效率效率完成重复性的劳动 如果你需要经常重复的做
2、某个工作,那么可以编写一个VBA代码来帮你快速完成。克服克服克服excel自身功能的局限性 excel提供的功能有效,提供的函数也有效。而我们利用VBA则可以自定义功能、自定义函数。应用应用编制自已的应用软件 即使你不是专业的编程人员,你也可以利用VBA+Excel编写出你想要的应用软件怎么才能学好怎么才能学好VBAVBA6、独立编写VBA小软件1、身边备有几本VBA参考书5、多帮助别人,多总结4、多练习、多思考、多提问2、常用录制宏功能3、多查看帮助文件Textqq进入进入VBAVBA编程环境编程环境qqVBAVBA窗口的组成窗口的组成 VBAVBA窗口由工具栏、工程资源管理器窗口、窗口由工
3、具栏、工程资源管理器窗口、属性窗口、代码窗口和立即窗口组成。属性窗口、代码窗口和立即窗口组成。qq新建模块进行新建模块进行VBAVBA编程编程 V-1 VBA编程环境 进入进入VBAVBA编程环境(编程环境(Excel2007Excel2007)如果是在如果是在Office 2007Office 2007中,若你没看到中,若你没看到“开发工具开发工具”选项卡的话,先到选项中打开它。选项卡的话,先到选项中打开它。工程窗口选择对象选择事件属性窗口选择对象的属性代码窗口 VBE编程环境 然后在“开发工具”选项卡的“代码”区域里按”Visual Basic”按键,就可以打开同样的界面 标准工具条标准工
4、具条视图视图Microsoft ExcelMicrosoft Excel按钮:切换按钮:切换Excel 2007Excel 2007窗口窗口插入按钮:插入模块或过程插入按钮:插入模块或过程运行子过程运行子过程/用户窗体按钮:运行模块中的程序用户窗体按钮:运行模块中的程序中断按钮:中断正在运行的程序中断按钮:中断正在运行的程序重新设置按钮:结束正在运行的程序重新设置按钮:结束正在运行的程序设置模式按钮:在设计模式和非设计模式之间切换设置模式按钮:在设计模式和非设计模式之间切换工程资源管理器按钮:用于打开工程资源管理器工程资源管理器按钮:用于打开工程资源管理器属性窗口按钮:用于打开属性窗口属性窗口
5、按钮:用于打开属性窗口对象浏览器按钮:用于打开对象浏览器对象浏览器按钮:用于打开对象浏览器Microsoft Excel插入模块运行子过程/用户窗体设计模式中断重新设计 工程资源管理器对象浏览器属性窗口 新建模块新建模块 在在在在“工程工程工程工程”视图中,右键单击视图中,右键单击视图中,右键单击视图中,右键单击”ThisWorkbook”ThisWorkbook”ThisWorkbook”ThisWorkbook”,然后在菜单中选然后在菜单中选然后在菜单中选然后在菜单中选“插入插入插入插入”-“-“-“-“模块模块模块模块”,就会在主界面出,就会在主界面出,就会在主界面出,就会在主界面出现一
6、片空白(如图现一片空白(如图现一片空白(如图现一片空白(如图Module1Module1Module1Module1)。即可在空白进行)。即可在空白进行)。即可在空白进行)。即可在空白进行VBAVBAVBAVBA编程。编程。编程。编程。V-2-1 V-2-1 常量、变量常量、变量常量:在程序运行中其存储的值不会改变。常量:在程序运行中其存储的值不会改变。变量:在程序运行中其值可以改变。变量:在程序运行中其值可以改变。VBA VBA使用常量、变量来存储值。用来保存在程使用常量、变量来存储值。用来保存在程序运行期间数据。序运行期间数据。V-2 VBA编程基础常量 在程序运行过程中,其值在程序运行过
7、程中,其值不会被改变不会被改变的量称为常量。的量称为常量。在在VBAVBA中有三类常量:中有三类常量:直接常量直接常量 如:如:1010,20%20%,123.0123.0,“ABAB”,“VBAVBA程序设计程序设计”等等 符号常量符号常量系统常量系统常量 指指VBAVBA系统预先定义好的,用户可以直接引用的量。系统预先定义好的,用户可以直接引用的量。如:如:acFormacForm,acQueryacQuery,vbOkvbOk,vbRed vbRed 变量是内存中的临时单元,存放在程序执行变量是内存中的临时单元,存放在程序执行过程中过程中产生的中间结果和最后输出结果。产生的中间结果和最后
8、输出结果。在程序中使用变量,就要给变量定义名称及类型,在程序中使用变量,就要给变量定义名称及类型,即对变量进行声明。即对变量进行声明。变量 变量命名规则变量命名规则变量名必须以字母或汉字开头,后可跟字母、汉字、变量名必须以字母或汉字开头,后可跟字母、汉字、变量名必须以字母或汉字开头,后可跟字母、汉字、变量名必须以字母或汉字开头,后可跟字母、汉字、数字或下划线组成(不能含有小数点和空格),长度数字或下划线组成(不能含有小数点和空格),长度数字或下划线组成(不能含有小数点和空格),长度数字或下划线组成(不能含有小数点和空格),长度不超过不超过不超过不超过255255255255个字符的字符串;个字
9、符的字符串;个字符的字符串;个字符的字符串;不能使用不能使用不能使用不能使用VBAVBAVBAVBA中的关键字;中的关键字;中的关键字;中的关键字;VBAVBAVBAVBA中不区分变量名的大小写;中不区分变量名的大小写;中不区分变量名的大小写;中不区分变量名的大小写;变量名的最后一个字符可以是变量名的最后一个字符可以是变量名的最后一个字符可以是变量名的最后一个字符可以是%、&、!、!、!、!、#、$等表等表等表等表示数据类型的声明符。示数据类型的声明符。示数据类型的声明符。示数据类型的声明符。说明:常量名的命名规则与变量名的命名规则相同说明:常量名的命名规则与变量名的命名规则相同V-2-2 V
10、-2-2 数据类型与变量的声明数据类型与变量的声明 在VBA中,数据类型用来决定变量可以保存何种数据。VBA支持多种数据类型,为用户编程提供了方便。VBAVBA的数据类型的数据类型数据类型数据类型数据类型数据类型类型声明符类型声明符类型声明符类型声明符存储空间存储空间存储空间存储空间 取值范围取值范围取值范围取值范围整型整型整型整型(IntegerIntegerIntegerInteger)%2 2 2 2-32768-32768-32768-3276832767327673276732767长整型(长整型(长整型(长整型(LongLongLongLong)&4 4 4 4-214748364
11、8-2147483648-2147483648-21474836482147483647214748364721474836472147483647单精度浮点型单精度浮点型单精度浮点型单精度浮点型(SingleSingleSingleSingle)!4 4 4 4负数:负数:负数:负数:-3.402823E38-3.402823E38-3.402823E38-3.402823E38-1.401298E-45-1.401298E-45-1.401298E-45-1.401298E-45正数:正数:正数:正数:1.401298E-451.401298E-451.401298E-451.401298
12、E-453.402823E383.402823E383.402823E383.402823E38双精度浮点型双精度浮点型双精度浮点型双精度浮点型(DoubleDoubleDoubleDouble)#8 8 8 8负数:负数:负数:负数:-1.79769313486232E308-1.79769313486232E308-1.79769313486232E308-1.79769313486232E308-4.94065645841247E-3244.94065645841247E-3244.94065645841247E-3244.94065645841247E-324正数:正数:正数:正数:4
13、.94065645841247E-3244.94065645841247E-3244.94065645841247E-3244.94065645841247E-3241.79769313486232E3081.79769313486232E3081.79769313486232E3081.79769313486232E308货币型货币型货币型货币型(Currency)(Currency)(Currency)(Currency)8 8 8 8-922337203685477.5808-922337203685477.5808-922337203685477.5808-92233720368547
14、7.5808922337203685477.5807922337203685477.5807922337203685477.5807922337203685477.5807日期型日期型日期型日期型(Date)(Date)(Date)(Date)8 8 8 8100100100100年年年年1 1 1 1月月月月1 1 1 1日日日日9999999999999999年年年年12121212月月月月31313131日日日日字符型字符型字符型字符型(String)(String)(String)(String)$0 0 0 0字符字符字符字符65400654006540065400个字符个字符个字符
15、个字符字节型字节型字节型字节型(Byte)(Byte)(Byte)(Byte)1 1 1 10 0 0 0255255255255逻辑型逻辑型逻辑型逻辑型(Boolean)(Boolean)(Boolean)(Boolean)2 2 2 2TrueTrueTrueTrue或或或或FalseFalseFalseFalse对象型对象型对象型对象型(Object)(Object)(Object)(Object)4 4 4 4任何引用的对象任何引用的对象任何引用的对象任何引用的对象变体型变体型变体型变体型(Variant)(Variant)(Variant)(Variant)变量声明变量声明用用Dim
16、|StaticDim|Static语句显式声明局部变量语句显式声明局部变量 格式:格式:Dim Dim 变量名变量名 AS AS 类型类型 或或 Dim Dim 变量名类型符变量名类型符 语句中的语句中的“As As 类型类型”子句是可选的。如果子句是可选的。如果使用该子句,就可以定义变量的数据类型。未使用该子句,就可以定义变量的数据类型。未使用,默认变量的类型为变体型(使用,默认变量的类型为变体型(VariantVariant)。)。例如:例如:例如:例如:Dim i As integer,sDim i As integer,sDim i As integer,sDim i As integ
17、er,s 表示声明了一个名为表示声明了一个名为表示声明了一个名为表示声明了一个名为i i i i的整型变量和一个名为的整型变量和一个名为的整型变量和一个名为的整型变量和一个名为s s s s的的的的变体型变量。变体型变量。变体型变量。变体型变量。关键字Dim或Static的区别:Dim 声明:随过程的调用而分配存贮单元,每次:随过程的调用而分配存贮单元,每次调用都对变量初始化;过程体结束,变量的内容自动调用都对变量初始化;过程体结束,变量的内容自动消失,存储单元释放。消失,存储单元释放。Static 声明:Static Static 声明的变量,也称为静态声明的变量,也称为静态变量。静态变量在
18、程序运行过程中一直保留其值,变量。静态变量在程序运行过程中一直保留其值,即即每次调用过程,变量保持原来的值。每次调用过程,变量保持原来的值。qq隐式声明变量隐式声明变量 未进行上述的声明而直接使用变量,称未进行上述的声明而直接使用变量,称变量的变量的隐式声明隐式声明。采用隐式声明的变量都是。采用隐式声明的变量都是变体型(变体型(Variant Variant)。)。注意注意:VBAVBAVBAVBA中允许不事先声明而直接使用变量,可以通过中允许不事先声明而直接使用变量,可以通过中允许不事先声明而直接使用变量,可以通过中允许不事先声明而直接使用变量,可以通过语句语句语句语句 Option Exp
19、licitOption ExplicitOption ExplicitOption Explicit,来要求所使用的变量必须,来要求所使用的变量必须,来要求所使用的变量必须,来要求所使用的变量必须事先声明,否则事先声明,否则事先声明,否则事先声明,否则VBAVBAVBAVBA会发出警告信息。会发出警告信息。会发出警告信息。会发出警告信息。下下下下面面面面是是是是一一一一个个个个简简简简单单单单的的的的程程程程序序序序,其其其其使使使使用用用用的的的的变变变变量量量量a,a,a,a,b,b,b,b,SumSumSumSum都没有事先定义。都没有事先定义。都没有事先定义。都没有事先定义。Priva
20、te Sub Form_Click()Private Sub Form_Click()Private Sub Form_Click()Private Sub Form_Click()SumSumSumSum=0=0=0=0 a a a a=10=10=10=10 b b b b=20=20=20=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 良良好好的的编编程程习习惯惯应应该该是是“先先声声
21、明明变变量量,后后使使用用变变量量”,这这样样做做可可以以提提高高程程序序的的效效率率,同同时时也也使使程程序序易易于于调调试试。VBA VBA 中中可可以以强强制制显显式式声声明明,可可以以在在窗窗体体模模块块、标标准准模模块块和和类类模模块块的的通通用用声声明明段段中中加加入入语语句句:Option ExplicitOption Explicit声明而未赋值的变量的值为:数值型变量初始化为0;字符型变量为零长度字符串;变体型变量初始化为 Empty。变量的初始化V-2-3 V-2-3 运算符和表达式运算符和表达式运算符运算符算术运算符算术运算符算术运算符算术运算符例如:例如:例如:例如:1
22、23+456 123+456 123+456 123+456 结果结果结果结果 123456 123456 123456 123456 123&456 123&456 123&456 123&456 结果结果结果结果 123456123456123456123456 使用上使用上 与与+的区别:的区别:例如:例如:例如:例如:abcdef&12345 abcdef&12345 abcdef&12345 abcdef&12345 结果为结果为结果为结果为 abcdef12345abcdef12345abcdef12345abcdef12345 123&456 123&456 123&456 12
23、3&456 结果为结果为结果为结果为 123456 123456 123456 123456 abcdef+12345 abcdef+12345 abcdef+12345 abcdef+12345 结果为结果为结果为结果为 出错出错出错出错 123+456 123+456 123+456 123+456 结果为结果为结果为结果为 579579579579 连接运算符:、+(字符串连接)将两个操作数进行大小比较,结果为逻辑值。将两个操作数进行大小比较,结果为逻辑值。将两个操作数进行大小比较,结果为逻辑值。将两个操作数进行大小比较,结果为逻辑值。注意:注意:注意:注意:字符串比较字符串比较字符串比
24、较字符串比较,则按字符的则按字符的则按字符的则按字符的ASCIIASCIIASCIIASCII码值从左到右码值从左到右码值从左到右码值从左到右一一比较,直到出现不同的字符为止。一一比较,直到出现不同的字符为止。一一比较,直到出现不同的字符为止。一一比较,直到出现不同的字符为止。关系运算符将操作数进行逻辑运算,结果是逻辑值将操作数进行逻辑运算,结果是逻辑值将操作数进行逻辑运算,结果是逻辑值将操作数进行逻辑运算,结果是逻辑值逻辑运算符vv组成组成组成组成 由变量、常量、函数等运算对象加上运算符、圆括号由变量、常量、函数等运算对象加上运算符、圆括号由变量、常量、函数等运算对象加上运算符、圆括号由变量
25、、常量、函数等运算对象加上运算符、圆括号组成的式子。组成的式子。组成的式子。组成的式子。vv书写规则书写规则书写规则书写规则 (1)(1)(1)(1)运算符不能相邻。例运算符不能相邻。例运算符不能相邻。例运算符不能相邻。例a+-ba+-ba+-ba+-b是错误的。是错误的。是错误的。是错误的。(2)(2)(2)(2)乘号不能省略。例乘号不能省略。例乘号不能省略。例乘号不能省略。例x x x x 乘以乘以乘以乘以y y y y 应写成:应写成:应写成:应写成:x*yx*yx*yx*y。(3)(3)(3)(3)括号必须成对出现,均使用圆括号。括号必须成对出现,均使用圆括号。括号必须成对出现,均使用
26、圆括号。括号必须成对出现,均使用圆括号。(4)(4)(4)(4)表达式从左到右在同一基准上书写,无高低。表达式从左到右在同一基准上书写,无高低。表达式从左到右在同一基准上书写,无高低。表达式从左到右在同一基准上书写,无高低。vv运算优先级运算优先级运算优先级运算优先级 算术运算符算术运算符算术运算符算术运算符 连接运算符连接运算符连接运算符连接运算符 关系运算符关系运算符关系运算符关系运算符 逻辑运算逻辑运算逻辑运算逻辑运算表达式例例1 1:用人单位招聘秘书:年龄小于:用人单位招聘秘书:年龄小于4040岁的女性,学历专科或本科,岁的女性,学历专科或本科,年龄年龄4040,性别,性别=“女女”,
27、(学历学历=“专科专科”,学历,学历=“本科本科”)And And OrAnd And Or例例2 2:算术表达式:算术表达式:正确的正确的VBAVBA表达式:表达式:3 3=x And x=7=x And x=7 错误的错误的VBAVBA表达式:表达式:3=x=7 3=x=7 或或 3=x Or x=73=x Or x=7 考虑:考虑:若分别写成:若分别写成:年龄年龄40 And 40 And 性别性别=女女 And (And (学历学历=专科专科 And And 学历学历=本科本科)年龄年龄40 Or =0 x=0 ThenThen y=2*x+1 y=2*x+1 MsgBox y:&y
28、MsgBox y:&yEnd SubEnd SubPrivate 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的值,观察的值,观察y y的输出结果的输出结果qq多行多行 If If 语句语句格式:格式:If If 表达式表达式 Then Then 语句组语句组1 1 Else Else 语句组语句组22 End If End If多行多行IfIf语句的执行过程是:语句的执行过程是:如果如果“表达式表达式”的值为
29、真,的值为真,则执行语句组则执行语句组1 1;否则执行语句组;否则执行语句组2 2。当执行完语句组。当执行完语句组1 1或语句组或语句组2 2后,程序流程跳转到语句后,程序流程跳转到语句End IfEnd If的后面。的后面。语句组可以由一条或多条语句组成,语句组不能与语句组可以由一条或多条语句组成,语句组不能与ThenThen书写在同一行,否则书写在同一行,否则VBAVBA认为是一个单行认为是一个单行IfIf语句,语句,会导致会导致ElseElse没有匹配的没有匹配的IfIf。语句语句“End IfEnd If”是多行是多行IfIf语句的结束标志。在多行语句的结束标志。在多行IfIf语句中,
30、即使省略语句中,即使省略ElseElse子句,也要写该结束标志。省略子句,也要写该结束标志。省略ElseElse子句时的多行子句时的多行IfIf语句形式为:语句形式为:If If 表达式表达式 Then Then 语句组语句组 End IfEnd If 例:计算分段函数例:计算分段函数单单行行If If语语句句实现实现: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)多行多行If If语语句句实现实现:If x0 T
31、hen y=sin(x)+sqr(x*x+1)Else y=cos(x)x3+3*x End IfIf语句的嵌套If语句的嵌套是指If或Else后面的语句块中又包含If语句。If Then If Then End If End If 例:已知x,y,z三个数,使得xyz 用一个IF语句和一个嵌套的IF语句实现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 IfIfIf语句的嵌套注意事项:书写锯齿型;语句的嵌套注意事项:书写锯齿型;If If 与与End IfEnd If配对配对IfT
32、henElseIfIfThenElseIf语句语句(多分支结构多分支结构)If If Then1 Then 1 ElseIf ElseIf Then2 Then 2 Else Else 语句块语句块 n+1n+1 End IfEnd If不管有几个分支,依次判断,当某条件满足,执行相应的语句,其余分支不再执行;若条件都不满足,且有Else子句,则执行该语句块,否则什么也不执行。vElseIf不能写成 Else If。说明:例:已知百分制成绩例:已知百分制成绩markmark,显示对应的五级制成绩,显示对应的五级制成绩 下列三种方法哪些正确,哪些错误?下列三种方法哪些正确,哪些错误?循环结构 F
33、or Next循环 Do Loop循环ForNextNext循环结构:将一段程序重复执行指定的将一段程序重复执行指定的次数,其中使用一个计数变量,统计执行的次数。次数,其中使用一个计数变量,统计执行的次数。格式:For 循环变量初值 to 终值 Step 步长 语句块 Exit For 语句块 Next 循环变量ForForNextNext循环语句循环语句 循环体循环体 循环变量循环变量 =终值终值 语句块语句块 Exit ForExit For 语句块语句块 循环变量加步长循环变量加步长 T T F F 循环变量得初值循环变量得初值 功能:执执行行ForFor语语句句时时,“循循环环变变量量
34、”设设为为“初初值值”;执执行行到到NextNext语语句句时时,步步长长加加(减减)到到循循环环变变量量上上;再再执执行行ForFor语语句句时时,若若“循循环环变变量量”超超过过“终终值值”则循环结束。则循环结束。步长:未指定值时默认为步长:未指定值时默认为1 1。若若“步步长长”是是正正数数或或0 0,则则“初初值值”应应大大于于等等于于“终值终值”,否则,否则,“初值初值”应小于等于应小于等于“终值终值”。例:计算累加程序 S=1+2+3+4.+x,并输出结果。方法:接收一个累加的终值,确定一个循环变量,循方法:接收一个累加的终值,确定一个循环变量,循环变量有环变量有2 2个作用(加数
35、和循环变量),确定一个存储个作用(加数和循环变量),确定一个存储累加和的变量。使用循环计算,最后输出显示结果。累加和的变量。使用循环计算,最后输出显示结果。Dim s As integer,x As integer x=InputBox(请输入累加的终值)For x=l To x s=s+x Next思考:思考:计算计算=1+3+5+7=1+3+5+7X X 或或 2+4+6+82+4+6+8X X 如何编写?如何编写?DoDoLoopLoop语句语句(循环结构循环结构)Do While LoopDo While Loop语句语句Do Until LoopDo Until Loop语句语句Do
36、 Loop WhileDo Loop While语句语句Do Loop UntilDo Loop Until语句语句 Do While Do While Loop Loop语句语句 i=1i=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成立时,执行循环体成立时,执行循环体循环变量循环变量i i必须有初值必须有初值防止产生死循环防止产生死循环有可能一次也不执行循环体有可能一次也不执行循环体修改循环控制变修改循环控制变量,改变加数值量,改变加数值 Do Loop While Do Loop Wh
37、ile i=1i=1 Do Do s=s+i s=s+i i=i+1 i=i+1 Loop 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必须有初值必须有初值防止产生死循环防止产生死循环有可能一次也不执行循环体有可能一次也不执行循环体修改循环控制变修改循环控制变量,改变加数值量,改变加数值 Do Loop Until Do Loop Until i=1i=1 Do Do s=s+i s=s+i
38、i=i+1 i=i+1 Loop Until i10 Loop Until i10当当i10i10成立时,结束执行循环体成立时,结束执行循环体循环变量循环变量i i必须有初值必须有初值防止产生死循环防止产生死循环至少执行一次循环体至少执行一次循环体修改循环控制变修改循环控制变量,改变加数值量,改变加数值三种循环语句:即三种循环语句:即For For、DoDoLoopLoop,共同,共同的特点是重复执行一个语句系列的特点是重复执行一个语句系列(循环体循环体),不同点是控制重复次数的时机和方法不,不同点是控制重复次数的时机和方法不一样。一样。数组:数组不是一种数据类型,而是一组相同类型的变量的集合
39、。可以像使用普通变量一样使用数组中的每一个元素。使用数组的好处是用一个 数组名代表逻辑上相关的一批数据,用下标表示该数组中的各个元素,可以提高处理数据的效率,缩短和简化程序。V-5 数组 数组不是一种数据类型,而是一组相同类型数组不是一种数据类型,而是一组相同类型的变量的集合,的变量的集合,数组必须先声明后使用。数组必须先声明后使用。两类数组:两类数组:两类数组:两类数组:静态静态静态静态(定长定长定长定长)数组、动态数组、动态数组、动态数组、动态(可变长可变长可变长可变长)数组数组数组数组 1.1.一维数组一维数组 定义一维数组的形式:定义一维数组的形式:Dim Dim 数组名数组名(下界下
40、界 ToTo上界上界)As)As 类型类型 声明了数组的名、维数、大小、类型声明了数组的名、维数、大小、类型 V-5-1 数组的定义说明:说明:数组名的命名规则与变量的命名相同。数组名的命名规则与变量的命名相同。数组名的命名规则与变量的命名相同。数组名的命名规则与变量的命名相同。数组的元素个数:上界数组的元素个数:上界数组的元素个数:上界数组的元素个数:上界-下界下界下界下界+1+1+1+1。缺缺缺缺省省省省 为为为为0 0 0 0,若若若若希希希希望望望望下下下下标标标标从从从从1 1 1 1开开开开始始始始,可可可可在在在在模模模模块块块块的的的的通通通通用用用用部部部部分分分分使使使使用
41、用用用Option Option Option Option BaseBaseBaseBase语语语语句句句句将将将将设设设设为为为为1 1 1 1。其其其其使使使使用用用用格格格格式式式式是:是:是:是:Option Base 0|1Option Base 0|1Option Base 0|1Option Base 0|1 后面的参数只能取后面的参数只能取后面的参数只能取后面的参数只能取0 0 0 0或或或或1 1 1 1例如:例如:例如:例如:Option Option Option Option Base Base Base Base 1 1 1 1 将将将将数数数数组组组组声声声声明明
42、明明中中中中缺缺缺缺省省省省 下下下下标标标标设设设设为为为为1 1 1 1下界下界下界下界 和和和和 不能使用变量,不能使用变量,不能使用变量,不能使用变量,必须是常量必须是常量必须是常量必须是常量,常量,常量,常量,常量可以是直接常量、符号常量,一般是整型常量。可以是直接常量、符号常量,一般是整型常量。可以是直接常量、符号常量,一般是整型常量。可以是直接常量、符号常量,一般是整型常量。如果省略如果省略AsAs子句,则数组的类型为变体类型。子句,则数组的类型为变体类型。数数数数组组组组中中中中各各各各元元元元素素素素在在在在内内内内存存存存占占占占一一一一片片片片连连连连续续续续的的的的存存
43、存存储储储储空空空空间间间间,一一一一维维维维数数数数组在内存中存放的顺序是按下标大小的顺序。组在内存中存放的顺序是按下标大小的顺序。组在内存中存放的顺序是按下标大小的顺序。组在内存中存放的顺序是按下标大小的顺序。例:Dim mark(1 to 100)As Integer例:Dim a(-1 to 3)As Integer声明一维数组a,包含了5个整型元素a(-1)、a(0)、a(1)、a(2)、a(3);在定义静态数组时,每一维的元素个数必须 是常数,不能是变量或表达式。如:错误的声明,下标是变量 Dim x(n)或:n=Inputbox(“输入n”)Dim x(n)As Single 注
44、意:在数组声明中的下标说明了数组的整体,即每维的大小;而在程序其他地方出现的下标表示数组中的一个元素。两者写法形式相同,但意义不同。例如:Dim x(10)As Integer x(10)=100 表示声明了数组表示声明了数组x x,有有1111个数组元素个数组元素对对x(10)x(10)这个数这个数组元素赋值组元素赋值定义二维数组的形式:定义二维数组的形式:Dim Dim 数组名数组名(下界下界1 1 To To上界上界1 1,下界下界2 2 To To上界上界2 2)As)As 类型类型例如:例如:Dim a(2,3)As SingleDim a(2,3)As Single 二维数组在内存
45、的存放顺序是二维数组在内存的存放顺序是“先行后列先行后列”。数组数组a a的各元素在内存中的存放顺序是:的各元素在内存中的存放顺序是: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.二维数组例:例:Dim lArray(0 To 3Dim lArray(0 To 3,0 To 4)As Long 0 To 4)As Long 共有共有 4 45 5个元素
46、等价于个元素等价于:Dim lArray(3:Dim lArray(3,4)As Long4)As Long 一维数组元素的引用使用形式:使用形式:数组名数组名(下标下标)其中:其中:下标可以是常量、整型变量或表达式。下标可以是常量、整型变量或表达式。例如:例如:设有下面的数组设有下面的数组A A(10)(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)下标使用变量下标使用变量 A(i+2)=
47、B(i+1)A(i+2)=B(i+1)下标使用表达式下标使用表达式注意:引用数组时不能下标越界注意:引用数组时不能下标越界 V-5-2 数组的基本操作1.数组元素的引用引用二维数组的形式:数组名(下标1,下标2)下标1指定元素在二维表中所在的行,下标2指定元素在二维表中所在的列。例如:例如:a(1,2)=10 a(1,2)=10 a(i+2,j)a(i+2,j)a(2,3)*2 a(2,3)*2 在程序中常常通过二重循环来操作使用二维数组元素。数组引用实例:通过循环给数组元素的初值通过循环给数组元素的初值 For i=1 To 10 AFor i=1 To 10 A数组的每个元素值为数组的每个
48、元素值为1 1 A(i)=1 A(i)=1 Next i Next i 数组的输入数组的输入(通过通过InputBox()InputBox()函数函数)For i=1 To 4For i=1 To 4 For j=1 To 5 For j=1 To 5 sc(i,j)=InputBox(sc(i,j)=InputBox(输入输入sc(&i&,&j&)sc(&i&,&j&)的值的值)Next j Next j Next i Next i2.数组元素的输入 V-6 VBA过程 过程是构成程序的一个模块,往往用来完成一个相对独立的功能。过程可以使程序更清晰、更具结构性。VBA 具有四种过程:Sub
49、过程、Function 函数、Property 属性过程和Event 事件过程。Sub过程执行一些有用的任务但是不返回任何值,它们以关键字Sub开头并以关键字End Sub结束。如下例:V-6-1 Sub过程Sub main()Msgbox(“Hello!”)End Sub第一行Sub表示过程的开始,main为过程名;第二行是过程的主体,调用函数Msgbox(),输 出”Hello!”;最后End Sub表示过程 的结束。Sub 过程的参数有两种传递方式:按值传递(ByVal)和按地址传递(ByRef)。如下例:Subpassword(ByValxasinteger,ByRefyasinteg
50、er)Ify=100theny=x+yelsey=x-yx=x+100Endsub 1 Sub过程的参数传递在上例中,过程password每次执行时需要向其传递两参数(x,y),否则该过程不能执行。在传递x与y参数时,x不影响过程password外部x的值,而y则对过程外的y值产生影响。2 Sub过程的调用调用过程有两种方式:1.Call 过程名(参数1,参数2);2.过程名 参数1,参数2如下例:Sub main()Call password(10,20)password 30,40End Sub方式1方式2注意:调用Sub过程也是在过程中进行的 V-6-2 Function函数Functi