1、VBA基础知识,宏 & IDE,VBA,VBA,即Visual Basic For Application,是Microsoft Office中的一种编程语言,是基于Visual Basic 发展而来的,它们具有相似的语言结构,宏,宏(Macro)是一组VBA语句,可以理解为一个程序段,或一个子程序。在Office中,宏可以直接编写,也可以通过录制形成,宏的安全性,VBA的功能强大,甚至被用来编写病毒,因此微软限制了VBA的使用,第一次使用VBA的时候,应做如下工作: 打开Excel应用程序 选择“工具” | “宏” | “安全性”菜单命令,设置宏的安全级为“低”,录制宏,任务:将eg1.xl
2、s的Sheet1中的标题行文字设置为:楷体,蓝色,字号18,加粗;行高设置为:25 录制方法: 选择“工具” | “宏” | “录制新宏”菜单命令,指定宏保存的位置,当前工作簿 只有该工作簿打开时,相应的宏才可以用 新工作簿 个人宏工作簿 当前机器上的工作簿都能使用,执行宏,执行一个宏时,EXCEL便按照宏语句执行相应的操作,就像VBA代码在对EXCEL进行“遥控” 运行方法: 选择“工具” | “宏” | “宏”菜单命令,编辑宏,进入编辑状态 选择“工具” | “宏” | “宏”菜单命令 选择宏名 单击“编辑”按钮,编辑宏,代码说明 SubEnd Sub 子程序开始、结束 单引号 注释 圆点
3、. 对象之间,或者对象及其属性、事件、方法、事件之间的分隔符,表示隶属关系 WithEnd With 结构语句,可以在一个对象上执行一系列的语句,一方面可以节约代码输入量,一方面也可以提高运行效率,将宏指定给按钮,在Excel中打开“窗体”工具栏(“视图” “工具栏”“窗体”) 在工作表添加按钮 右击按钮,然后在快捷菜单中 选择“指定宏”,将宏指定给工具栏按钮,将宏指定给工具栏按钮 在Excel中打开工具栏“自定义” 对话框(“视图” “工具栏”“自定义”) 在“命令”选项卡中,从“类别”列表框中选择“宏”,再从“命令”列表框中将“自定义按钮”拖到某个工具栏 右击该按钮,然后在快捷菜单中选择“
4、指定宏”,将宏指定给工具栏按钮,编辑“自定义按钮” 在Excel中打开工具栏“自定义” 对话框(“视图” “工具栏”“自定义”) 右击该按钮,在快捷菜单中编辑,将宏指定给工具栏按钮,将“自定义按钮”从工具栏删除 在Excel中打开工具栏“自定义” 对话框(“视图” “工具栏”“自定义”) 用鼠标选中按钮从工具栏拖出,将宏指定给工具栏按钮,创建自定义工具栏 在Excel中打开工具栏“自定义” 对话框(“视图” “工具栏”“自定义”) 在“工具栏”选项卡中,单击“新建”按钮 在“新建工具栏”对话框中,输入工具栏名称,单击“确定” 删除自定义工具栏 在Excel中打开工具栏“自定义” 对话框(“视图
5、” “工具栏”“自定义”) 在“工具栏”选项卡的“工具栏”列表中选择要删除的工具栏,单击“删除”按钮,练习,打开“练习.xls”工作簿,为Sheet1工作表中成绩前三名的歌手记录设置字体格式:隶书,16磅,红色;填充颜色:黄色,将上述操作录制成宏并将宏名保存为“MyFirst”复制上题的“MyFirst”宏,重命名为“MySecond”,编辑此宏,去掉多余未用到的语句,然后将其中的字体名称设置改为“黑体”,然后在工作表Sheet2中添加一个按钮并指定宏“MySecond”,单击该按钮将此此宏作用于标题行,VBA的IDE及语法基础,打开Visual Basic编辑器,两种方法: Alt + F1
6、1 菜单“工具”“宏”“Visual Basic编辑器”,模块,宏是一系列命令和函数 ,存储于 Visual Basic 模块中。录制宏时,Visual Basic会新建一个附属于工作薄的模块,并在此模块中存储每个宏,模块,模块是自定义的过程、函数保存的地方,也是录制的宏保存的场所 模块的任务: 保存通用过程和函数 定义模块内的私有变量或整个工程的公有变量,在模块中编写过程,过程是VBA的一串指令,有特定名称,可以单独执行,包含函数和子过程两种 函数用于执行一项具体的任务,并返回一个值,如Excel有一个叫Left的函数,它用于返回字符串的左边部分 子过程一组自成体系的指令,不返回值。所有用宏
7、录制器录制的宏都是子过程,注意:“宏”对话框中只有子过程,没有函数。,在模块中编写过程,过程的创建可以使用菜单的“插入” | “过程”对话框来创建(对话框如下图所示),也可以在代码窗口直接键入“Sub”或“Function”来创建,在模块中编写过程,如果没有使用 Public、Private 显式指定,Sub 过程按缺省情况就是公用的(Public) 一旦创建了一个公共的VBA函数,Excel就会将它加入到“插入函数”对话框的“用户定义”的类别里 使用关键字Private声明的函数不会出现在“插入函数”对话框上,VBA的数据类型,变体:Variant(默认) 数值: 整型:Byte,Integ
8、er,Long 浮点型:Single,Double 字符串:String 逻辑:Boolean 对象:Object,变量,变量是内存中的一个区域,用来存储在程序运行时可以更改的信息 声明变量 Dim x Dim y As Integer Dim z As String 使用变量 y = 100 z = “lyx” x = z & “同学考试” & y & “分”,选择结构,选择结构,If ThenElse End If,If sScore = 60 ThensResult = “合格” ElsesResult = “不合格” End If,实例2,编写一个自定义函数过程用于判断某个整数是否为奇
9、数,多决策选择结构,If ThenElseIf ThenElseIf ThenElseEnd If,实例3,编写一个自定义函数过程,将某门课程的百分制成绩x转换成等级制成绩y,其中评定条件如下表所示:,使用逻辑运算符测试多种条件,And:所有的条件为真,结果为真;有一个条件为假,结果为假 Or:任何一个条件为真,结果为真 Not:取反,把条件从真变成假,从假变成真,练习,编写一个自定义函数过程用于判断某个年份是否闰年,然后调用此函数判断工作表Sheet3中的各年份是否闰年,循环结构,当程序中有规律地重复执行某些操作时,可以用循环结构实现 例如:如何求s = 1 + 2 + 3 + + 100
10、? s = 0 s = s + 1 s = s + 2 s = s + 3 s = s + 100 实际上重复了同一个操作:s = s + i,只是 i 每次都增加 1,ForNext语句,功能:以指定的次数重复执行循环体 格式: For 变量=初值 To 终值 Step 步长 语句块 Exit For 语句块 Next 变量 变量又称循环控制变量、计数器变量,初值为循环起始值,终值为循环的结束值 步长为循环控制变量的每次改变增量,缺省为1 Exit For为强制退出循环语句,实例4,编写一个子过程,用于计算下式的值:s = 1*2 + 2*3 + 3*4 + 4*5 + + 19*20,Fo
11、r Each.Next 语句,For EachNext 语句主要针对一个数组或集合中的每个元素,重复执行一组语句。其语法如下:For Each element In groupstatementsExit ForstatementsNext element,For Each.Next 语句,Sub IsSuchSheet()Dim mySheet As Worksheet, counter As Integercounter = 0For Each mySheet In WorksheetsIf mySheet.Name = “Sheet2“ Thencounter = counter + 1
12、End IfNext mySheetIf counter 0 ThenMsgBox “This workbook contains Sheet2.“ElseMsgBox “Sheet2 was not found.“End If End Sub,For Each.Next 语句,在对集合进行循环时,使用For Each 循环要比For 循环快1/3 以上,因此,尽量对集合对象使用For Each 循环,因为一方面,For Each 循环不需要设置循环变量,不容易出错,而且循环速度又比For 循环快 对于数组,For Each 循环的速度优势不大,不过还是可以快10%左右,练习,编写一个自定义函
13、数过程用于计算某个整数的阶乘,然后调用此函数计算工作表Sheet4中的各数的阶乘,常用函数,数值函数 Int(x):返回不大于x的整数 Rnd():返回一个0, 1)之间的数产生m, n之间的随机整数的公式:Int(Rnd() * (n - m + 1) + m Sqr(x):返回x的平方根 字符串函数 Len(s):返回字符串s的长度,即字符的个数 Mid(s, i, n):从字符串s的第i个字符起向右取n个字符出来并返回,常用函数,输入函数语法:InputBox(Prompt)使用:s = InputBox(“提示信息”) 输出函数语法:MsgBox(Prompt)使用:MsgBox “输出信息”,练习,编写一个自定义函数过程用于从一个身份证号码中取出此证持有人的生日,并把生日显示为“年-月-日”格式,如:1988-08-18,然后调用此函数填充工作表Sheet5中各教师的生日,