第4章 常用对象 【上】
来源:互联网 发布:dojo 加载js 编辑:程序博客网 时间:2024/06/07 19:14
概述:
你要做什么,作用的对象是什么?
1 与Excel交流,需要熟悉的常用对象
2、 Application对象
2.1 ScreenUpdating 属性
是否保存中间结果
Option ExplicitSub inputTest() Cells.ClearContents ' 清除表中所有数据 Range("A1:A10") = 100 '在A1:A10单元格输入数值 MsgBox "刚才在A1:A10输入数值100,你能看到结果吗 ?" '提示框 Range("B1:B10") = 200 MsgBox "刚才在B1:B10输入数值200,你能看到结果吗?" End Sub
如果想要最后显示结果写入单元格中,可以用 Application.ScreenUpdating = False
False: 表示关闭屏幕更新,也就是结果不会立即刷新出来,True刚好相反(默认就是True)
2.2、DisplayAlerts属性
取消确认框,提示框,直接操作
Option ExplicitSub delSht() Dim sht As Worksheet '定义工作表变量 For Each sht In Worksheets '循环所有工作表 If sht.Name <> ActiveSheet.Name Then '如果不是活动工作表就是删除 sht.Delete End If Next sht End Sub
取消提示警告框 : Application.DisplayAlerts = False (这个不显示警告信息,注意慎重用,删除数据不好恢复) 默认为True,记得改完之后改回来
Option ExplicitSub delSht() Dim sht As Worksheet '定义工作表变量 Application.DisplayAlerts = False '取消提示框 For Each sht In Worksheets '循环所有工作表 If sht.Name <> ActiveSheet.Name Then '如果不是活动工作表就是删除 sht.Delete End If Next sht Application.DisplayAlerts = True '开启提示框End Sub
2.3、 EnableEvents属性
可以通过设置Application对象的EnableEvents属性来启用或禁用事件
自动写入单元格地址
Option ExplicitPublic Sub Worksheet_SelectionChange(ByVal Target As Range) Target.Value = Target.Address End Sub
效果:
如果要禁用事件: Application.EnableEvents = False
注意禁用之后要开启: Application.EnableEvents = True
Public Sub Worksheet_SelectionChange(ByVal Target As Range) Application.EnableEvents = False Target.Value = Target.Address Application.EnableEvents = TrueEnd Sub
2.4、WorksheetFunction属性
通过WorksheetFunction调用工作表函数
2.5、它的子对象
3、管理工作簿,了解Workbook对象
3.1 Workbook 与 Workbooks
Workbook表示单个对象, Workbooks对象集合
怎么引用单个工作簿
方法一: 利用索引号引用工作簿
语法: Workbooks.Item(3)
简写: Workbooks(3)
方法二:利用工作簿名引用工作簿
语法: Workbooks("Book1")
Workbooks("Book1.xls") 如果保存之后系统显示后缀,必须加上后缀。其它情况可以不用加
3.2 认识Workbook,需要了解的信息
Name: 文件名称
Path : 文件路径
FullName: Name+Path (全路径)
Sub testWorkbook() Range("B2") = ThisWorkbook.Name Range("B3") = ThisWorkbook.Path Range("B4") = ThisWorkbook.FullNameEnd Sub
3.3、实际操作,都能做什么
创建一个工作簿文件
Workbooks.Add "路径"
Sub testWorkbook() Workbooks.Add ActiveWorkbook.SaveAs "D:\1.xls"End Sub
其实好像都是当前活动工作簿,另存为达到创建目的。应该还有更好的方法,只是还不知道
打开工作簿
语法:Workbooks.Open "路径"
例子: Workbooks.Open "D:\1.xls"
激活工作簿
语法:Workbooks("工作簿名称").Activate
Workbooks("Book1").Activate
保存工作簿
ThisWorkbook.Save (表示保存当前工作簿)
ThisWorkbook.SaveAs Filename :="路径"
简写:ThisWorkbook.SaveAs "路径"
还有:ThisWorkbook.SaveCopyAs "路径"
两者的区别是,saveAs 另外新文件同时打开这个新的文件,SaveCopyAs 它不会打开新的文件,但是它会新增其它工作簿
关闭工作簿
Workbooks.Close '关闭所有工作簿
Workbooks("Book1").Close '关闭Book1
如果保存修改值,可以在后面加上True
Workbooks("Book1").Close True
3.4、ThisWorkbook 与ActiveWorkbook
ThisWorkbook是程序所在工作簿的引用,ActiveWorkbook是对活动工作簿的引用
4、操作工作表,认识worksheet对象
4.1 认识Worksheet对象
Worksheets是集合,Worksheet单个对象 这个和工作簿类似
引用工作簿第一张表
Worksheets.Item(1)
Worksheets(1) (通过索引)
Worksheets("Sheet1")
4.2、操作工作表
新建工作表:
语法: Worksheets.Add
指定位置新增工作表
Worksheets.Add before:=Worksheets(1) 在第一张工作表前插入一张新工作表
Worksheets.Add after:=Worksheets(1) 在第一张工作表后插入一张新工作表
Worksheets.Add Count:=3 在活动工作表前插入3张工作表
Worksheets.Add before:=Worksheets(Worksheets.Count), Count:=2 在最后一张工作表前插入两张工作表
更改工作表标签名称
Worksheets(2).Name = "工资表" '更改第二张工作表的标签名称为“工资表”
ActiveSheet.Name = "工资表" 当前活动工作名称修改为“工资表”
Worksheets.Add(before:=Worksheets(1)).Name="工资表" ’ 在第一张工作表前面插入名称为”工资表”的工作表
删除工作表
Worksheets("Sheet1").Delete '删除Sheet1工作表
激活工作表
Worksheets(1).Activate 激活第一张工作表
Worksheets(1).Select 激活第一张工作表
当工作表隐藏时,调用它的Select会出错,用Activate方法不用同时选中多张工作表,但用Select方法可以同时选中未隐藏的多张工作表
复制工作表
Worksheets("工资表").copy before:= Worksheets("出勤登记表") '复制工资表到出勤登记表前面
简单:Worksheets("工资表").Copy
移动工作表
这个与复制工作表类似。只要把Copy改为Move
Worksheets("工资表").Move before:=Worksheets ("出勤登记表") '将“工资表”移动到 “出勤登记表前面”
Worksheets("工资表").Move 表示移动新的工作簿中。
隐藏或显示工作表
Worksheets("工资表").Visible = False
Worksheets("工资表").Visible= xlSheetHidden
Worksheets("工资表").Visible = 0
以上三句都是隐藏
Worksheets("工资表").Visible = xlSheetVeryHidden
Worksheets("工资表").Visible = 2
以上两句都是隐藏,但是这个必须通过VBA代码取消隐藏或属性窗口
显示工作表
Worksheets("工资表").Visible = True
Worksheets("工资表").Visible=xlSheetVisible
Worksheets("工资表").Visible=1
Worksheets("工资表").Visible = -1
获取工作表的数量
Worksheets.Count
4.3、Sheets 与 Worksheets
Sheets:包含Worksheets,还有其它类型表,例如图表
Worksheets:只是普通工作表集合
5、核心,至关主要的Range对象
5.1、 多种方法引用Range对象
Worksheets("Sheet1").Range("A1").Value = 50 '将工作表Sheet1中单元格A1的值为50
如果不写就是当前活动工作表
Range("A1:A10").Value=200 '在活动工作表A1:A10输入数值为200
参数可以字符串, 当然你可以为特定区域设置名称。
Range ("名称") .Value = 100 '为你设置名称区域单元格设置值为100
引用不连续的多个区域
Range("A1:A10, A4:E6,C3:D9").select '选中单元格区域(三个区域),分割为逗号
若是取交集,也就是重叠区域,分割符为空格
Range("B1:B10 A4:D6").Select '选中多个单元格区域的交集
包围所有区域的最小方块
Range("B6:B10", "D2:D8") '注意逗号隔开, 选中区域为B2:D10
Worksheet(或Range) 对象的Cells属性
ActiveSheet.Cells(3,4).Value = 20 "在第3行与第4列的相交的单元格输入20"
ActiveSheet.Cells(3,“D”).Value = 20 "在第3行与第D列的相交的单元格输入20"
Range("B3:F9").Cells(2,3) = 100 相对坐标也就是 D4单元格
Range(Cells(1,1), Cells(10,5)).Select 选中活动工作表的A1:E10单元格
Range("A1", "E10").Select 或 Range (Range("A1"), Range("E10)).Select 选中活动工作表的A1:E10单元格
ActiveSheet.Cells(2).Value=200 活动工作表的第2个单元格输入200
注意编号顺序: 从左往右, 从上到下的顺序编号
Range("B3:F9").Cells(8).Value = 100 在B3:F9的第8个单元格输入100
当序号超过区域最大编号,会扩展新行,列数不变
ActiveSheet.Cells.select 选中活动工作表中的所有单元格
Range("B3:F9").Cells.select 选中活动工作表中的B3:F10单元格区域
更加简短的快捷方式
[B2] B2 单元格
[A1:D10] A1:D10单元格
[A1:A10, C1:C10,D1:E10] 三个区域的并集
[B1:B10 A5:D5] 两个单元格区域的交集,也就是重叠部分
[n] 名称为n代表的单元格
注意:只限于常量,不能用于变量
5.2、还可以怎样得到单元格
引用整行
ActiveSheet.Rows("3:3").Select 选中活动工作表的第3行
ActiveSheet.Rows("3:5").Select 选中活动工作表第3行到第5行
ActiveSheet.Rows(3).Select 选中活动工作表第3行
ActiveSheet.Rows.Select 选中工作表的所有行
Rows("3:10").Rows("1:1").Select 选中第3行到第10行区域中的第1行
引用整列
ActiveSheet.Columns("F:F") 选中活动工作表中的F列
ActiveSheet.Columns(6) 选中活动工作表的第6列
ActiveSheet.Columns 选中工作表中的所有列
Columns("B:G").Columns("B:B").Select 选中B:G列区域中的第2列
Application 对象的Union方法
也就是将多个区域当成一区域对待
Application.Union(Range("A1:A10"), Range("D1:D5")).Select
Range对象的Offset属性
Range("A1").offset(2,3).Value = 500 (偏移,向下移动2行(如果是负数就相反方向),向右移动3列(如果是负数就相反方向) 也就是D3单元格赋值为500)
Range对象的Resize属性
Range("B2").Resize(5,4).Select 将B2单元格扩大为B2:E6 (5行4列)
Range("B2:E6").Resize(2,1).Select 将B2:E6单元格缩小为B2:B3 (两行一列)
Worksheet对象的UsedRange属性
ActiveSheet.UsedRange.Select 选中活动工作表中已经使用的单元格区域
Range对象的CurrentRegion属性
CurrentRegion属性返回当前区域,即以空行和空列的组合为边界的区域
Range("B5").CurrentRegion.Select
Range对象的End属性
返回当前区域结尾处的单元格
Range("C5").End(xlUp).Select 最上面一个单元格
xlToLeft 向左移动
xlToRight 向右移动
xlUp 向上移动
xlDown 向下移动
ActiveSheet.Range("A65536").End(xlUp).Offset(1,0).Value=100 在A列最后一行增加值为100 ,如果第一个出现A1没有值就会有问题
改变这一状况,需要判断是否第一个是否有值
Sub testWorkbook() Dim c As Range Set c = ActiveSheet.Range("A65536").End(xlUp) If c.Value <> "" Then '不为空表示当前单元格有值需要偏移下一个 Set c = c.Offset(1, 0) End If c.Value = 100End Sub
Sub UsedTest() Dim xrow As Long '使用的行数加一,这个有可能A列不是行数最多,这个有问题的 xrow = ActiveSheet.UsedRange.Rows.Count + 1 Cells(xrow, "A").Value = 100 End SubSub currTest() Dim xrow As Long xrow = Range("A1").CurrentRegion.Rows.Count + 1 Cells(xrow, "A") = 100End Sub
5.3、操作单元格,还需要了解什么
单元格里的内容,Value属性
Range("A1:B2").Value = "abc" 在A1:B2输入abc
单元格个数,Count一下就知道
Range("B4:F10").Count 计算 B4:F10的单元格式的数量
ActiveSheet.UsedRange.Rows.Count 求活动工作表中已使用的行数
ActiveSheet.UsedRange.Columns.Count 求活动工作表已使用的列数
单元格地址,Address属性
Selection.Address 选中区域的地址
5.4、 亲密接触,操作单元格
选中单元格,Activate与Select方法
ActiveSheet.Range("A1:B10").Select
ActiveSheet.Range("A1:B10").Activate
选择性清除单元命令清除它们
Range("A1").Clear 清除所有
Range("A1").ClearComments 清除单元格批注
Range("A1").ClearContents 清除单元内容
Range("A1").ClearFormats 清除单元格式
复制单元格区域
Range("A1").Select '选中A1单元格Selection.Copy '复制选中单元格Range("C1").Select '选中C1单元格ActiveSheet.Paste '粘贴动作
简写:
Range("A1").Copy Range("C1")
或:Range("A1").Copy Destination:=Range("C1")
WorkSheets("Sheet1").Range("A1:A10").Copy WorkSheets("Sheet2").Range("B1:B10") 将工作表sheet1 的A1:A10 复制到sheet2的B1:B10
如果不确定单元格区域大小,指定目标区域最左上角单元格
Range("A1").CurrentRegion.Copy Range("G1")
复制数值,不复制格式
Sub Rng_Copy_1()
Range("A1:D10").Copy
Range("F1:I10").PasteSpecial Paste:=xlPasteValues
End Sub
或者
Sub Rng_Copy_2()
Range("F1:I10").Value = Range("A1:D10").Value
End Sub
剪切单元格
Sub RngCut()
Range("A1:E5").Cut Destination:=Range("G1") ' 把A1:E5剪切到G1:K5
Range("A6:E10").Cut Range("G6") ' 把A6:E10剪切到G6:K10
End Sub
删除单元格
Range("B5").Delete Shift:=xlToLeft 删除B5单元格,删除后右侧单元格左移
Range("B5").Delete Shift:=xlUp 删除B5单元格,删除后下方单元格上移
Range("B5") .EntireRow.Delete 删除B5单元格所在的行
Range("B5").EntireColumn.Delete 删除B5单元格所在的列
Range("B5").Delete 相当于 Range("B5").Delete Shift:=xlUp
6、不止这些,其他常见的对象
6.1、 名称、就是名字
Excel中定义的名称就是给单元格区域(或数值常量、公式)取的名字
ActiveWorkbook.Names.Add Name:="date", RefersToR1C1:="=Sheet1!R5C[-2]"
R5C[-2] : "R"后面的数字代表行号,“C” 后面的数字代表列号。指定行与指定列相交的单元格
C[-2] 中的[]是什么?
[] 表示相对引用,没有加称之为相对引用
R5表示工作表中的第5行,C[-2]表示活动单元格左边的第二列
R[2]C[3] : 对活动单元格下方的第2行与右面第3列相交的单元格的引用。
R2C3: 对工作表第2行与第3行相交的单元格的引用
可以使用A1样式的引用
ActiveWorkbook.Names.Add Name:="date" , RefersTo:="=Sheet1!$B$4" (不加$就是相对引用,反之就是绝对引用)
定义名称,更简单的方式
Range("A1:C10").Name = "date"
怎样引用名称
ActiveWorkbook.Names("date").Name = "姓名" '更改名称名
ActiveWorkbook.Names("date").RefersTo = "点点滴滴" '更改名称的值
Sub d() Dim i As Integer, mx As Integer mx = ActiveWorkbook.Names.Count '统计一共有多少个名称 For i = 1 To mx ActiveWorkbook.Names(i).Visible = False '隐藏名称 Next iEnd Sub
6.2、单元格批注,Comment对象
给单元格添加批注
Sub d() Range("B5").AddComment Text:="VBA用的666"End Sub
怎么知道单元格是否有批注
Range("B5").Comment Is Nothing 判断B5是否存在批注
Sub d() If Range("B5").Comment Is Nothing Then MsgBox "B5单元格没有批注!" Else MsgBox "B5单元格中有批注了" End IfEnd Sub
Range("B5").Comment.Text = "更改过的批注" 更改批注的内容
Range("B5").Comment.Visible = False 隐藏批注
Range("B5").Comment.Delete 删除批注
6.3、 给单元格化妆
Sub d() ' 字体设置 With Range("A1:L1").Font .Name = "宋体" '字体为宋体 .Size = 12 '字体大小 .Color = RGB(255, 0, 0) '字体颜色为红色 .Bold = True '加粗 .Italic = True '斜体 .Underline = xlUnderlineStyleDouble '双下划线 End With '给单元格添加底纹 Range("A1:L1").Interior.Color = RGB(255, 255, 0) '添加黄色底纹 '给表格设置边框 With Range("A1").CurrentRegion.Borders .LineStyle = xlContinuous '设置单线边框 .Color = RGB(0, 0, 255) '设置边框的颜色 .Weight = xlHairline '设置边框线条样式 End With '如果不知其他设置采用宏进行录制然后修改End Sub
- 第4章 常用对象 【上】
- 第4章 常用对象【下】 案例
- 第12章 对象上
- 第3章面向对象(上)
- 第5章面向对象(上)
- 第5章 面向对象(上)
- 第5章 面向对象(上)
- 第4章 对象
- 面向对象软件构造(第2版)-第5章 接近对象技术 (上)
- 面向对象软件构造(第2版)-第4章 复用性方法Approaches to reusability (上)
- 第5章 Java笔记 面向对象(上)
- 面向对象软件构造(第2版)-第6章 Abstract data types抽象数据类型 (上)
- 面向对象软件构造(第2版)-第7章 静态结构: 类 (上)
- 第三天----Java基础---面向对象上
- 第3课 面向对象 上
- 第七天:面向对象,常用关键字
- 面向对象(二):常用知识上
- 第五天 Javascript面向对象和一些常用对象
- Oracle与JDBC的Group By坑-yellowcong
- WZ安卓面试宝典App
- 用dubbo框架写的简单的接口作为服务端
- kali安装网易云
- BAT脚本
- 第4章 常用对象 【上】
- 如何修改Linux的启动级别
- Gradle 同步时报错,Could not find com.android.support.constraint:constraint-layout:1.0.0-alpha9的解决方法
- 《Spark快速大数据分析》笔记Ch1、2
- android代码混淆
- ElasticSearch Java API中的and、or和not
- 阿里云热修复技术Sophix的快速接入
- C/C++内存管理
- 【数论】教堂