《VBA编程及应用基础完整版课件全套ppt教学教程最全整套电子教案电子讲义(最新).ppt》由会员分享,可在线阅读,更多相关《VBA编程及应用基础完整版课件全套ppt教学教程最全整套电子教案电子讲义(最新).ppt(230页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、VBA概述,开发环境VBE、宏,本讲内容,什么是VBA?,VBA(Visual Basic for Applications)是Microsoft Office 系列组件的内置编程语言,即应用程序中的VB。它“寄生”于Office应用程序,是 Office 套装软件的一个重要组件 使用 VBA 可以结合 Office 组件开发应用程序,如在 Excel 中自定义函数、开发应用程序等 例:认识VBA,Excel中使用VBA功能,VBA开发环境VBE,Office提供了VBA的开发环境,即 Visual Basic 编辑器(VBE)窗口 在使用VBE前,必须先运行Office软件,如 Excel
2、2010,在Excel环境中打开VBE窗口的方法: 单击“开发工具”选项卡中“代码”组中的“Visual Basic”按钮 按 Alt + F11 组合键,进入VBE,“开发工具”选项卡,默认情况下,“开发工具”选项卡没有显示在功能区,可通过“自定义功能区”设置将其显示,工程资源管理器窗口,代码窗口,属性窗口,立即窗口,本地窗口,VBA工程,工作表对象,工作簿对象,窗体,模块,了解几个概念,添加模块,菜单栏“插入”|“模块”命令,添加过程,在模块中添加过程,最常见的结构如下: 可以通过“插入”|“过程”对话框,Sub 过程名( ) 程序代码 End Sub,第一个VBA程序,添加一个模块,再添
3、加一个子过程,如下: 运行该过程查看结果,Sub Test1() Range(A1).Value = Hello, World! End Sub,如何引用单元格中的值,两种方法: Cells(行号, 列号).Value 如:Cells(5, 3).Value,表示引用的是C5单元格 Range(单元格地址).Value 如:Range(“C5”).Value,表示引用的也是C5单元格,一开始直接写VBA代码有点困难?,录制宏很好用哦,什么是宏?(P.1),具体学习VBA之前,先来了解一下“宏” 宏是通过一次单击就可以应用的命令集,一般用于自动执行一系列重复性操作,以提高工作效率 本质上宏是保存
4、在 Visual Basic 模块中的一组代码 例:将认识宏工作簿Sheet1工作表中的A1单元格设置成绿色底纹的格式,创建宏(P.1),使用宏录入器录制宏,步骤如下: 在“开发工具”选项卡上的“代码”组中,单击“录制宏” 在弹出的“录制新宏”对话框中进行设置后再单击“确定”开始录制。 在工作表中执行某些操作。 在“开发工具”选项卡上的“代码”组中,单击“停止录制”。 实践:录制一个修改单元格底纹的宏,保存带宏的工作簿,保存带宏的工作簿时会弹出如下信息框,需要将工作簿保存为“启用宏的工作簿(.xlsm)” 单击“否”按钮,弹出“另存为”对话框 在“保存类型”下拉列表框中选择“Excel启用宏的
5、工作簿(.xlsm)”进行保存,执行宏方法1(P.2),使用“宏”对话框 选择“开发工具”选项卡,在“代码”组中单击“宏”按钮,弹出“宏”对话框 单击“执行”按钮,执行宏方法2,为宏指定快捷键 录制宏时可以指定 在“宏”对话框中选中要设置的宏,单击“选项”按钮,执行宏方法3,将宏命令添加至功能区或快速工具栏,运行宏方法4,将宏指定到工作表上的按钮(或其它图形对象) 插入表单按钮控件 为表单按钮控件指定宏,实践,自己录制一个设置单元格边框的宏,并用以上四种方法运行录制的宏 思考:宏的本质是什么?,查看宏代码,选择“开发工具”选项卡,在“代码”组中单击“宏”按钮,弹出“宏”对话框 单击“编辑”按钮
6、,查看宏代码,VBA过程代码,“设置底纹”是宏的名称,查看宏代码,Sub 设置底纹() 设置底纹 宏 With Selection.Interior .Pattern = xlSolid .PatternColorIndex = xlAutomatic .Color = 5287936 .TintAndShade = 0 .PatternTintAndShade = 0 End With End Sub,说明 一个宏就是一个 sub 过程 单引号后为注释内容,不是代码部分 With 语句可以对某个对象执行一系列的语句,而不用重复指出对象的名称 Selection.Interior表示“选定区域
7、的内部”对象 Pattern等为interior对象的属性,使用帮助:选择某个关键字,按F1可弹出帮助系统!,实践,自动排序(P.17 操作题(3) 自动累计 自动完成高级筛选(P.17 操作题(4) 高级筛选,Thank You,VBA编程基础,本讲内容,变量,一个问题:如何交换两个杯子中的可乐?,变量,如何交换A1和B1两个单元格的值? Sub Test() x = Range(A1).Value Range(A1).Value = Range(B1).Value Range(B1).Value = x End Sub,变量,变量 是指在程序运行过程中其值可以改变的量 说明(P.22):
8、变量用于存储程序运行中的临时数据 变量有一定类型,占用一定空间 变量命名规则:字母打头,最长255个字符。等如:Sum、x_1等,数据类型,数据是指可以被计算机处理的信息,是程序的必要组成部分,也是程序处理的对象 数据分类的目的是为了快速处理数据和有效利用存储空间 不同的数据类型占用的存储空间不同、或者存储格式不一样,VBA中常用的数据类型:数值型、字符型、逻辑型、对象型,数据类型,数据类型,数据类型,变量声明,变量声明的目的是说明变量的作用域和变量的类型,以便为变量分配内存空间和及时回收内存空间 建议变量先声明再使用,在通用声明中写Option Explicit语句,变量声明,变量类型的显式
9、说明:Dim语句,语法: Dim 变量名 As 数据类型, 变量名As 数据类型 举例: Dim a As Single Dim intCount As Integer, strPhone As String * 8 如何将 i 和 j 声明为整型变量? Dim i, j As Integer Dim i As Integer, j As Integer,实践,编写一个宏,以A1单元格中的数值作为半径,求出圆的周长与面积,并将它们分别写入B1单元格和B2单元格,常量,除了变量,数据还可以分为常量。常量是指在程序执行之前就已经确定了值,并且在程序执行过程中,其值不会发生改变的量 VBA中有三种形
10、式的常量: 直接常量 符号常量 系统常量,常量,直接常量 也叫一般常量,用户直接书写的值,如:18、1.25、”China”、True、False 符号常量 用符号表示的常量,定义格式如下: Const 常量名 As 数据类型 = 常量表达式 如 :Const PI = 3.1415926 使用符号常量可以减少程序出错的可能性,加快程序的修改和提高程序的可读性,常量,系统常量 VBA提供的系统内部已经定义好的常量,可以直接使用,分为VBA系统常量和Excel系统常量 VBA系统常量以小写字母“vb”开头,例如色彩常量“vbBlack”表示黑色。Excel系统常量通常以小写字母“xl”开头 系统
11、常数采用大小写混合的格式,用户可以通过在VBE中单击“视图”菜单下的“对象浏览器”命令,在打开的“对象浏览器”中查看系统常量的具体值,运算符与表达式,运算符是对特定数据执行运算任务的操作符 将常量、变量和函数等用运算符连接起来的运算式称为表达式 常见的4种基本运算符: 算术运算符 连接运算符 比较运算符 逻辑运算符,算术运算符,说明: / :浮点除法,如10/3的结果为3.3333333 :整数除法,若操作数不是整数,则通过舍去小数 部分再进行整除,如103的结果为3,11.64的结 果为3 Mod:取模运算,返回两个数(若是浮点数则四舍五入 为整数)相除的余数,如12 Mod 5的结果为2,
12、19 Mod 6.7 的结果为5 :指数运算,进行乘幂运算,如32的结果为9,算术表达式,算术表达式与数学表达式的区别 不能漏写运算符,如3xy应写为3 * x * y 算术表达式中使用的括号都是圆括号,如 (a - b) 2 + (a + b) 2) * c 算术运算符的优先级: ()、* / 、 、 MOD、+ - 练习: 表达式 2 3 / 3 Mod 9 4的值为?,答案:1,连接运算符,连接运算符用来连接两个以上的字符串,使其成为一个单一的字符串。VBA中有两个: & 运算符。任何非字符串变量或表达式在进行&连接前都会被转换为字符串,如 + 运算符。操作数都是字符串时才可以进行连接运
13、算,如,Visual & Basic 的结果为 Visual Basic Excel & 2010 的结果为 Excel 2010 4 & 5的结果为字符串 45,Visual + Basic 的结果为Visual Basic Excel + 2010 运行结果出错,提示“类型不匹配” 4+5的结果为整数9,关系运算符,关系运算符用于比较数据的大小关系,主要有: =、=、 dog ? 101 99 ?,逻辑运算符,常用的逻辑运算符有: And 逻辑与 Or 逻辑或 Not 逻辑非 优先级:Not AndOr,实践,编写一个宏,针对A1单元格中输入的某个个年份数据进行判断,并以“闰年”或“平年”
14、为结论写入到B1单元格中 闰年的判断条件:能被4整除但不能被100整除,或者能被400整除,With 语句,编写一个宏,设置A1单元格的文字属性为宋体、14磅、粗体、字体颜色为红色?,对象重复书写,With语句,作用:简化代码,不需要输入重复的内容 格式: 实践:改写过程“字体格式”?,With 对象 .属性1=属性值1 .属性2=属性值2 .属性n=属性值n End With,常用的VBA函数,Int(x)函数 返回不大于x的整数 如:Int(5.8)的结果为5,Int(-5.8)的结果为-6 Rnd()函数 返回一个0, 1)之间的随机浮点数 若要返回一个m, n之间的随机整数,则可以使用
15、公式:Int(Rnd() * (n - m + 1) + m 在调用 Rnd 函数之前,应先使用无参数的 Randomize 语句初始化随机数生成器,实践,编写一个宏,先在A1单元格中生成一个10, 99之间的随机整数,然后识别该整数是奇数还是偶数,并将识别结果写入到B1单元格,常用的VBA函数,Val(s)函数 返回s中第一个非数字字符之前的数字(忽略空格) 例如:Val(“ 1615 198th Street N.E.”)的返回值为1615198 可以把 Val(s) 当作是一个将数字文本转换成数字数值的函数,常用的VBA函数,InputBox 函数 作用:产生输入对话框,向计算机提供信息
16、,输入数据 格式: 变量 = InputBox(提示信息,对话框标题,默认值) 返回值:输入框中输入的内容,字符型,常用的VBA函数,MsgBox 函数 作用:产生消息框,向用户输出提示信息 格式: 变量=MsgBox(提示信息, 类型, 对话框标题) 对话框类型一般由“图表样式”+“按钮样式”+“默认按钮”组成 返回值:整型,对应用户单击的按钮,实践,编写一个宏,使用输入框从键盘输入三个整数,然后找出三个数中的最大数,并用消息框输出,VBA 程序控制结构,判断结构,本讲内容,程序控制结构,程序一般是按照书写的顺序执行的,但有时候需要按照不同的条件执行不同的操作,这就是流程控制 VBA中程序的
17、控制结构分为:,顺序结构,A,B,选择结构,P,A,B,循环结构,P,A,判断语句,判断语句用来根据条件表达式的结果控制程序的流程,If 语句,行结构 If Then Else 块结构 If Then Else End If,If 语句,流程图:,If 语句,实例: 设计一个找出两个数中更大数的程序,界面设计如下图所示。在 B1 和 B2 单元格分别输入任意一个数,单击“更大数”圆角矩形时,在 B3 单元格输出两数中更大的数,If 语句,实践1: 设计一个找出三个数中最大数的程序,界面设计如下图所示。在 B1、B2 和 B3 单元格分别输入任意一个数,单击“最大数”圆角矩形时,在 B4 单元格
18、输出三个数中更大的数,If 语句,实践2: 编写一个过程,用输入框 InputBox 函数输一个学生的成绩,然后判断此学生的成绩是否合格,并将评判结果以“成绩合格”或“成绩不合格”用消息框显示,If 语句,实例: 设计一个“健康秤”程序,界面设计如下图所示。单击“健康状况”按钮,根据公式:标准体重 = 身高 - 105 判断某人的健康状况。体重高于标准体重*1.1为偏胖,在 B3 单元格输出“偏胖,注意节食”;体重低于标准体重*0.9为偏瘦,在 B3 单元格输出“偏瘦,增加营养”;其它则在 B3 单元格输出“正常,继续保持”,If Then Else If Then Else End If E
19、nd If,嵌套的If语句,If 语句,实践3: 编写一个过程,用InputBox函数输入某门课程的百分制成绩x,然后将其按下表的评定条件转换成等级制成绩y,并将等级制成绩用MsgBox函数输出,分支较多时,嵌套的If语句太烦?,If 语句,If Then ElseIf Then ElseIf Then Else End If,If 语句,ElseIf 语句的流程图:,If 语句,重新实现“实践3”?,If 语句,实践4: 根据杭州的气候特点,通常认定3月5月为春季,6月8月为夏季,9月11月为秋季,12月次年2月为冬季。编写一个程序,在B1单元格输入当前的月份,单击“判定”按钮时,在B2单元
20、格以“*月是*季”的形式输出结果,Select Case语句,Select Case Case Case Case Else End Select : 算术表达式或字符表达式,测试对象 : 下列格式中的一个或多个(,) 精确表示:,,如:1, 3, 5, 7, 9 范围表示: To ,如:A To Z 关系表示:Is ,如:Is = 60,功能: 根据测试表达式的值,从多个语句块中选择符合条件的一个语句块执行!,Select Case 语句,重新实现“实践4”?,Select Case 语句,实践: 使用 Select Case 语句重新实现“实践3”程序?,Select Case 语句,实践
21、: 某商场举行周年庆购物促销活动,活动规则如下: 金额500元以下不享受优惠 金额500元及以上且小于2000元优惠10% 金额2000元及以上且小于4000元优惠12% 金额4000元及以上且小于6000元优惠14% 金额6000元及以上优惠15% 编写一个过程,输入购物总价,计算应付款和优惠款额,Thank You,VBA 程序控制结构,For.Next 循环语句 Exit 语句,本讲内容,一个问题,某商场约定其某款产品的销售单价(原价为100元)根据不同的购买数量有不同的折扣(如下表所示),试编写一个VBA过程,计算产品销售单价工作簿中该产品各销售数量情况下的折扣过的销售单价,循环结构,
22、当程序中有规律地重复执行某些操作时,可以用循环结构实现 循环结构的执行过程,总是在一定条件的控制下对循环体进行重复操作,当满足某一终止条件时停止循环,并结束循环退出,ForNext语句,功能:以指定的次数重复执行循环体 格式: For 变量 = 初值 To 终值 Step 步长 语句块 Exit For 语句块 Next 变量 变量又称循环控制变量、计数器变量,初值为循环起始值,终值为循环的结束值 步长为循环控制变量的每次改变增量,缺省为1 Exit For为强制退出循环语句,ForNext语句,计算产品折扣后的销售单价?,ForNext语句,实例1: 求 s = 1 + 2 + 3 + +
23、100 ? 利用赋值语句可写出如下形式的代码:s = 0s = s + 1s = s + 2s = s + 3 s = s + 100 实际上重复了同一个操作:s = s + i,只是 i 每次都增加 1,ForNext语句,实践1: 编写一个宏,使用 InputBox 函数输入一个正整数 n,然后计算 n 的阶乘(n!),并将计算结果用 MsgBox 函数输出?,ForNext语句,实例2: 编写一个宏MySub1,在Sheet1工作表的A1:A10区域各单元格中分别随机生成10, 99之间的整数;再编写一个宏MySub2,在Sheet1工作表的A1:A10区域中,将偶数所在的单元格设置为黄
24、色背景,ForNext语句,实践2: 编写一个宏MySub1,在Sheet1工作表的A1:J1区域各单元格中分别随机生成100, 999之间的整数;再编写一个宏MySub2,在Sheet1工作表的A1:J1区域中,将奇数所在的单元格设置为红色字体,退出循环?,Exit 语句(P.32),Exit For 语句,用于跳出 For 循环以提前终止循环,例如: Exit 语句一般与 If 语句结合使用 另外,Exit Do 语句可以用于跳出 DoLoop 循环,Exit 语句,另外,Exit 语句还可以退出过程、函数 Exit Sub Exit Function,实例3,Exit 语句,实践3: 小
25、明2014年往银行存入了10000元,已知银行的年存款利率为3.6%,请问到哪一年小明的存款本息和会超过12000元?,ForNext 练习,找出成绩表中的最高分,并将此单元格设置黑底白字格式,效果如图所示,Thank you,VBA 程序控制结构,For Each.Next 循环语句,本讲内容,复习,ForNext语句功能:以指定的次数重复执行循环体 格式: For 变量 = 初值 To 终值 Step 步长 语句块 Exit For 语句块 Next 变量 变量又称循环控制变量、计数器变量,初值为循环起始值,终值为循环的结束值 步长为循环控制变量的每次改变增量,缺省为1 Exit For为
26、强制退出循环语句,复习,编程。单击“随机数”按钮,产生10个两位随机正整数,并写入 A1:A10 区域单元格;单击“标记偶数”按钮,将 A1:A10 区域中偶数所在的单元格设置为黄色底纹、红色字体,新问题,编程。单击“随机数”按钮,产生30个两位随机正整数,并写入 A1:C10 区域单元格;单击“标记偶数”按钮,将 A1:C10 区域中偶数所在的单元格设置为黄色底纹、红色字体,For EachNext 语句,For EachNext 语句用于针对一个数组或一个集合中的每一个元素重复执行一组代码。语法格式如下: For Each In 代码段 Exit For Next 元素 元素是用来遍历集合
27、中所有元素的变量,For Each.Next 语句,在对集合进行循环时,使用 For Each 循环要比 For 循环快 1/3 以上,因此,尽量对集合对象使用 For Each 循环 对于数组,For Each 循环的速度优势不大,不过还是可以快 10% 左右,For EachNext 语句,例:在指定的 A1:C15 区域中依次在每个单元格中插入一个10, 99之间的随机整数,Sub Sample() Dim vCell As Range Worksheets(Sheet1).Activate Randomize For Each vCell In Range(A1:C15).Cells
28、vCell.Value = Int(Rnd() * (99 - 10 + 1) + 10 Next vCell End Sub,Activate是Worksheet对象的一个方法,使指定工作表成为活动工作表,vCell为存储Range(“A1:C15”)集合中每个元素的变量,即每个单元格,For EachNext 语句,实践1: 使用 For EachNext 语句实现“新问题”的需求?,For EachNext 语句,Range.Offset 属性 P.120 返回 Range 对象,它代表距离指定区域一定偏移量的区域 语法:Range对象.Offset(RowOffset, ColumnO
29、ffset) 示例: Range(A1).Offset(3, 3).Activate,此示例激活 A1 单元格向右偏移三列、向下偏移三行处的单元格,即 D4 单元格,For EachNext 语句,实例1:在 A1:A10 区域中产生 10 个 10,99 之间的随机整数,然后判断它们的奇偶性,并在 B1:B10 各单元格中分别填写判断结果,如下图所示,For EachNext 语句,实践2 某商场约定其某款产品的销售单价(原价为100元)根据不同的购买数量有不同的折扣(如下表所示),试编写一个VBA过程,计算产品销售单价工作簿中该产品各销售数量情况下的折扣过的销售单价,For EachNex
30、t 语句,实践3 找出 成绩表 中的最高分,并将成绩最高人的姓名设置为黑底白字格式,效果如图所示,Thank you,VBA 程序控制结构,Do.Loop 循环结构,本讲内容,一个问题,DoLoop语句,若不能确定循环次数,只能确定循环条件,则可以使用DoLoop语句完成循环,语法格式如下:,Do While|Until 语句块1 Exit Do 语句块2 Loop,Do 语句块1 Exit Do 语句块2 Loop While|Until,先判断条件再执行循环体,先执行循环体,再判断条件,DoLoop 语句,Do Loop中的While和Until While表示是当型循环,条件为真时执行循
31、环体,条件为假时终止循环 Until表示是直到型循环,条件为假时执行循环体,条件为真时终止循环 Do While n5 Loop是等价的 Exit Do语句 用来跳出循环,一般用于条件判断之后,如If语句,DoLoop 语句,解决人口计算问题?,DoLoop 语句,实践: 小明2014年往银行存入了10000元,已知银行的年存款利率为3.6%,请问到哪一年小明的存款本息和会超过12000元?,Thank you,Excel 的VBA对象,Excel VBA对象模型 & Range对象,Excel 对象模型,VBA通过对象来操作和控制 Excel 查看完整的 Excel VBA 对象模型: 在
32、VBE 的工具栏单击 按钮 在帮助窗口的工具栏单击 按钮 在目录窗格的“Excel 2010 开发人员”下选择“Excel 对象模型参考”主题,Excel 对象模型,在对象模型列表中,以复数形式陈列的表示的是一个集合。集合是指一组相似的对象,例如 Workbooks 是一个集合,而 Worksheets 是另一个集合 例: Application.Workbooks(Book1).Worksheets(Sheet1).Range (A1) 其中,Book1是集合Workbooks的一个元素,Sheet1是集合Worksheets的一个元素,A1是集合Range的一个元素,Excel VBA的常
33、用对象,使用对象变量,定义对象变量 Dim xlsApp As Excel.Application Dim xlsWB As Excel.Workbook Dim xlsWS As Excel.Worksheet Dim xlsRG As Excel.Range 为对象变量赋值 Set xlsWB = Workbooks(eg1.xlsx) Set xlsWS = Workbooks(1).Worksheets(Sheet1) Set xlsRG = Workbooks(eg1). Sheets(1).Range(A1:D5),几个特殊对象,Range对象( P.118),Range 对象本身
34、就表示一个集合,可代表某一单元格、某一行、某一列、某一选定区域 可用 Range(arg) 来返回代表单个单元格或单元格区域的 Range 对象,其中 arg 为区域名称。例如: Dim vRng As Range Set vRng = ThisWorkbook.ActiveSheet.Range(A1:A5),Range对象,还可以使用 Range(Cell1, Cell2) 来引用一个单元格或单元格区域,其中 Cell1 是区域左上角(右下角)单元格地址, Cell2 是区域右下角(左上角)单元格地址 例如: Range (A1:C5) | Range(A1, C5),Range对象的常用
35、属性,Value 表示单元格的内容,不仅可表示单个单元格的值,也可将整个区域作为一个数组返回或者设置 例1: ActiveCell.Value = 5 例2: vData = ActiveSheet.Range(A5:E6).Value ActiveSheet.Range(A8:E9).Value = vData,Range对象的常用属性,Cells 表示单元格区域中的所有单元格 可用 Cells(row, column) 表示单元格区域中的某个单元格,其中row 为行号,column 为列标 例如,下面代码将当前工作表 B2:D4 区域的第2行第2列的单元格(即C3)的值设为5: ThisW
36、orkbook.ActiveSheet.Range(B2:D4).Cells(2, 2).Value = 5,Range对象的常用属性,Offset 表示相对于指定区域偏移若干行和列以后的区域,使用方法:Offset(row, column),其中 row 和 column 分别为行偏移量和列偏移量 例: ActiveCell.Offset(3, 3).Value = 5,实践1,在 公务员考试成绩表 工作簿中,假定学生均已获得相应学位,试编写一个宏,用 For EachNext 循环遍历“学历”列各学生的学历,然后在“学位”列填写其对应的学位。学历学位对应关系如下表所示:,Range对象的常
37、用属性,CurrentRegion 表示当前区域,当前区域是以空行与空列的组合为边界的区域 例如,下面代码选定工作表 Sheet1 上的当前区域: Worksheets(Sheet1).Activate ActiveCell.CurrentRegion.Select,Range对象的常用属性,Columns 表示指定单元格区域中的所有列 可用 Columns(index) 表示单元格区域中的某列 例如,下面代码将 B2:D4 区域第一列中每一单元格的值置为0: ThisWorkbook.ActiveSheet.Range(B2:D4).Columns(1).Value = 0,Range对象的
38、常用属性,ColumnWidth 表示指定区域中所有列的列宽,例: With Worksheets(Sheet1).Range(B3.A12) .ColumnWidth = .ColumnWidth * 2 End With,Range对象的常用属性,Column 返回指定区域第一个子区域的第一列的列号 例如,下面代码返回myRange区域最后一列的列号: myRange.Columns(myRange.Columns.Count).Column,Range对象的常用属性,Rows 表示指定单元格区域中的所有行 可用Rows(index)表示单元格区域中的某行 例如,下面代码将B2:D4区域的
39、第3行删除: ThisWorkbook.ActiveSheet.Range(B2:D4).Rows(3).Delete,Range对象的常用属性,RowHeight 表示指定区域中所有行的行高,例: ActiveSheet.Range(B3.A12).RowHeight = 10,Range对象的常用属性,Row 返回区域中第一个子区域的第一行的行号 例如,下面代码将工作表 sheet1 中每隔一行的行高设置为 4 磅: For Each rw In Worksheets(Sheet1).Rows If rw.Row Mod 2 = 0 Then rw.RowHeight = 4 End If
40、 Next rw,Range对象的常用属性,Count 表示指定单元格区域的单元格个数 注意:Cells、Columns 和 Rows 集合对象亦有 Count 属性,实践2,假设 员工薪资表 工作簿中的员工总数未知,试编写一个宏,统计其中薪资超过 5000 的员工人数,并将统计结果用消息框输出,Range对象的常用属性,Font:表示指定区域的字体格式,其本身也是一个对象,有如下常用的属性:,Name:字体名称 FontStyle:字形 Size:字号 Strikethrough:删除线 Superscript:上标,Subscript:下标 OutlineFont:空心字 Shadow:阴
41、影 Underline:下划线 ColorIndex:颜色编号,Range对象的常用属性,Range对象的常用属性,Interior 表示指定区域的内部格式,其本身也是一个对象,常用的属性是 ColorIndex 和 Pattern,其中 ColorIndex 的取值范围如 Font对象的 ColorIndex 值,Pattern 表示填充图案,实践3,假设 员工薪资表 工作簿中的员工总数未知,试编写一个宏,将薪资最高的员工的所在行设置为字体加粗、红色,背景为绿色填充?,实践3之我的解决方案,命名参数传递( P.92 ),命名参数 在调用 Sub 或 Function 过程时,可不必拘泥于语法
42、所规定的特定顺序来提供值,而按自定义顺序用命名参数来分配值。例如,假设一Sub过程设定了三个参数: Sub DoSomeThing (namedarg1, namedarg2, namedarg3) 则在调用它时,可使用以下语句: DoSomeThing namedarg3 := 4, namedarg2 := 5, namedarg1 := 20,命名参数传递,命名参数在调用具有可选的参数过程时显得特别有用。如果使用命名参数,则不必利用逗号去区分出失去位置的参数 例如: MsgBox Hi,VBA., , 命名参数示例 等价于 MsgBox Hi,VBA., Title:=命名参数示例,Ra
43、nge对象的常用属性,Address 返回区域的引用地址,默认时返回的是绝对引用,例如: Set mc = Worksheets(Sheet1).Cells(1, 1) MsgBox mc.Address 上面语句执行后,消息框中显示“$A$1”,Range对象的常用属性,End 表示包含源区域的区域尾端的单元格,语法为:End(Direction),其中 Direction 有4个取值:xlDown、xlToRight、xlToLeft、xlUp 例如,下面代码将选定区域从单元格 B4 延伸至第四行最后一个包含数据的单元格 Worksheets(Sheet1).Activate Range(
44、B4, Range(B4).End(xlToRight).Select,实践4,利用Range对象的 End 属性实现实践2的功能?,Range对象的常用属性,MergeCells 判断单元格或区域是否被包含在一个合并区域中,如果是,则该值为 True MergeArea 表示某单元格所在的合并区域。如果该单元格不在合并区域内,则该属性返回该单元格本身 例如,下面代码表示为包含单元格 A3 的合并区域赋值 Set ma = Range(a3).MergeArea If ma.Address = $A$3 Then MsgBox not merged Else ma.Cells(1, 1).Va
45、lue = 42 End If,Range对象的常用属性,注意: Cells、Columns 及 Rows 本身也是一个 Range 型的集合对象,因此,它们也具有 Value、Count、Font、Interior等属性,Range对象的常用方法,Activate 激活单个或多个单元格 Worksheets(sheet1).Range(A1).Activate Select 选中区域 Worksheets(sheet1).Range(A1:B5).Select AutoFit 将区域中的列宽和行高调整为最适当的值 Worksheets(1).Range(A1:E1).Columns.Auto
46、Fit,Range对象的常用方法,Copy:复制 Cut:剪切 PasteSpecial:粘贴,允许设置粘贴值还是格式(详见帮助) 例如,下面代码表示用 Sheet1 上单元格区域 C1:C5 和单元格区域 D1:D5 原有内容的和来取代单元格区域 D1:D5 中的数据 With Worksheets(Sheet1) .Range(C1:C5).Copy .Range(D1:D5).PasteSpecial _ Operation:=xlPasteSpecialOperationAdd End With,Range对象的常用方法,Insert 插入一个单元格或区域,其他单元格作相应移位以腾出空
47、间 ActiveSheet.Range(A1:D1).Insert Delete 删除 ActiveSheet.Range(A1:D1).Delete,Range对象的常用方法,Clear 清除Range内的内容,包括注释和格式 Worksheets(Sheet2).Range(A3.D12).Clear ClearContents 清除Range内的内容,不清除格式和注释 Worksheets(Sheet2).Range(A3.D12).ClearContents ClearFormats 清除Range内的格式 Worksheets(Sheet2).Range(A3.D12).ClearF
48、ormats,Range对象的常用方法,Merge 合并单元格 ThisWorkbook.ActiveSheet.Range(A1:D1).Merge UnMerge 将合并区域分解为独立的单元格 If Range(A1).MergeCells Then Range(A1).MergeArea.UnMerge Else MsgBox not merged End If,Bye Bye,Excel 的VBA对象,Workbook 和 Worksheet,Workbooks对象( P.109 ),Workbooks 对象用于返回 Excel 应用程序中当前打开的所有 Workbook 对象的集合
49、Workbooks 对象的常用属性: Item:集合中的项目(即工作簿),以数组形式存放 Set wb = Workbooks.Item(1) 在实际应用时,也可以不显式引用 Item 属性而返回某个工作簿对象,如上式可以写成: Set wb = Workbooks(1) Count :集合包含的工作簿个数 MsgBox Application.Workbooks.Count,Workbooks对象,Workbooks 对象的常用方法: Add :新建工作簿 Workbooks.Add Close :关闭所有的工作簿 Workbooks.Close Open :打开一个工作簿文档 Workbooks.Open C:PathWorkbook.xls,Workbooks对象,示例:判断某个工作簿是否已经打开 Sub IsBookOpen() Dim i As Integer For i = 1 To Workbooks.Count If Workbooks(i).Name = MyBook.xlsx T