4.3.1 Workbook对象是Workbooks集合中的一个成员
2. 怎样引用集合中的某个工作簿
法一:使用索引号引用工作簿
要引用Workbooks集合中的第3个Workbook,可以将代码写为:
Workbooks.Item(3)
使用时可以省略属性名称Item,将代码写为:
Workbooks(3)
法二:利用工作簿名引用工作簿
Workbooks("Book1")
Workbooks("Book1.xlsm")
? Workbooks("Book1").Name
? Workbooks("Book1.xlsm").Name
4.3.2 访问对象的属性,获得工作簿文件的信息
Sub WbMsg()
Range("B2") = ThisWorkbook.Name
Range("B3") = ThisWorkbook.Path
Range("B4") = ThisWorkbook.FullName
End Sub
4.3.3 用Add方法创建工作簿
Workbooks.Add
Workbooks.Add Template:="D:\我的文件\模板.xlsm"
Workbooks.Add "D:\我的文件\模板.xlsm"
4.3.4 用Open方法打开工作薄
Workbooks.Open Filename:="D:\我的文件\模板.xlsm"
Workbooks.Open "D:\我的文件\模板.xlsm"
4.3.5 用Activate方法激活工作簿
虽然可以同时打开多个工作簿文件,但同一时间只能有一个工作簿是活动的。如果想让不活动的工作簿变为活动的工作簿,可以用Workbooks对象的Activate方法激活它,例如:
Workbooks("工作簿1").Activate
4.3.8 ThisWorkbook与ActiveWorkbook
ThisWorkbook 和 ActivateWorkbook 都是Application对象的属性,都返回Workbook对象。但是,它们之间并不是等同的。ThisWorkbook是对代码所在的工作簿的引用,ActiveWorkbook是对活动工作簿的引用。
Sub wb()
Workbooks.Add
MsgBox "代码所在的工作簿为:" & ThisWorkbook.Name
MsgBox "当前活动工作簿为:" & ActiveWorkbook.Name
ActiveWorkbook.Close savechanges:=False
End Sub
4.4 操作工作表,认识Worksheet对象
4.4.1 引用工作表的3种方法
Worksheets.Item(3) '引用工作簿中的第3张工作表
Worksheets(3) '引用工作簿中的第3张工作表
Worksheets("ExcelHome") '引用工作簿中标签名称为"ExcelHome"的工作表
与使用索引号或标签名称引用工作表不同,使用代码名称引用工作表,只需直接写代码名称而不需先写集合名称Worksheets,例如:
Sheet3.Range("A1")=100 '在代码名称为sheet3的工作表的A1单元格输入100
注意Range("A1")与Range("A1").Value的区别
Range("A1").Value = 700
Range("A1") = 700
如果想获得某张工作表的代码名称,可以访问工作表的CodeName属性,例如:
MsgBox ActiveSheet.CodeName '用对话框显示活动工作表的代码名称
4.5 操作的核心,至关重要的Range对象
4.5.1 用Range属性引用单元格
1. 引用单个固定的单元格区域
Sub rng()
Range("A1:A10").Value = 200 '在活动工作表的A1:A10输入数值200
Dim n As String
n = "B1:B10"
Range(n) = 100 '在当前活动工作表的B1:B10输入数值100
End Sub
要引用定义为名称的单元格,可以将Range属性的参数设置为表示名称名的字符串或变量,例如:
Range("C_Date").Value = 100
2. 引用多个不连续的单元格区域
Range("A1:A10,A4:E6,C3:D9").Select '选中多个不连续的单元格区域
3. 引用多个区域的公共区域
Range("B1:B10 A4:D6").Value = 100 '在两个单元格区域的公共区间输入100
'尽管中间有空格,但参数只是一个字符串
4. 引用两个区域围成的矩形区域
Range("B6:B10","D2:D8").Select '两个参数间用逗号分隔
插入一列
Columns(4).Resize(, 1).Insert Shift:=xlToRight
Columns("A:A").Insert Shift:=xlToRight
Range("C1").Select
ActiveSheet.Rows(Selection.Row).Insert
ActiveSheet.Columns(Selection.Column).Insert
Range("C1").Select
Selection.EntireColumn.Insert , CopyOrigin:=xlFormatFromLeftOrAbove
Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove '插入一整行 ,单元格的移动方向向下,插入的行格式随上面行的格式
4.5.2 用Cells属性引用单元格
1. 引用工作表中指定行列交叉的单元格
ActiveSheet.Cells(3, 4).Value = 20
ActiveSheet.Cells(3, "D").Value = 20
在使用Cells引用工作表中的某个单元格时,总是可以将代码写为:
工作表对象.Cells(行号, 列标)
2. 引用单元格区域中的某个单元格
Range("B3:F9").Cells(2,3) = 100 '在B3:F9区域的第2行与第3列交叉的单元格中输入100
3. 将Cells属性的返回结果设置为Range属性的参数
还可以将Cells属性设置为Range属性的参数,例如:
Range(Cells(1, 1), Cells(10, 5)).Select '选中当前工作表的A1:E10单元格
这行代码和下面的两行代码是等效的
Range("A1", "E10").Select
Range(Range("A1"), Range("E10")).Select
4. 使用索引号引用单元格
Cells是工作表中所有单元格组成的集合,可以使用索引号引用该集合中的某个单元格,例如:
ActiveSheet.Cells(2).Value = 200 '在活动工作表的第二个单元格输入200
4.5.3 引用单元格,更简短的快捷方式
[B2] 'B2单元格
[A1:D10] 'A1:D10单元格区域
[A1:A10,C1:C10,E1:E10] '三个单元格区域的并集
[B1:B10 A5:D5] '两个单元格区域的公共部分
[n] '被定义为名称n的单元格区域
4.5.4 引用整行单元格
ActiveSheet.Rows("3:3").Select '选中活动工作表的第3行
ActiveSheet.Rows("3:5").Select '选中活动工作表的第3行到第5行
'Rows返回其父对象(ActiveSheet)中所有行组成的集合,参数是表示行的名称的字符串或字符串变量
如果使用索引号引用整行,代码为:
ActiveSheet.Rows(3).Select '选中活动工作表中的第3行
'3是索引号,表示引用父对象(ActiveSheet)中的第3行
如果要引用工作表中的所有行,代码为:
ActiveSheet.Rows.Select '选中活动工作表中的所有行
'如果不给Rows属性设置参数,则表示引用集合中的所有行,效果等同于 ActiveSheet.Cells
如果引用Range对象的Rows属性,则返回单元格区域中的指定行,例如:
Rows("3:10").Rows("1:1").Select
4.5.5 引用整列单元格
ActiveSheet.Column("F:G").Select '选中活动工作表中的F到G列
ActiveSheet.Columns(6).Select '选中活动工作表中的第6列
ActiveSheet.Columns.Select '选中活动工作表中的所有列
Columns("B:G").Columns("B:B").Select '选中B:G列区域中的第2列
4.5.6 用Union方法合并多个单元格区域
Application.Union(Range("A1:A10"), Range("D1:D5")).Select '同时选中两个区域
试题:选中活动工作表A1:A10单元格区域中与A1单元格内容相同的所有单元格。
Sub Sel()
Dim myrange As Range, n As Range
Set myrange = Range("A1")
For Each n In Range("A1:A10")
If n.Value=Range("A1").Value Then
Set myrange = Union(myrange,n)
End if
Next n
myrange.Select
End Sub
4.5.7 Range对象的Offset属性
Range对象的Offset属性,作用类似工作表中的Offset函数。
使用Offset属性,可以获得相对于指定单元格区域一定偏移量位置上的单元格区域。例如:
Range("A1").Offset(4, 0).Value = 500 '在A1下方的第4个单元格中输入数值500
'Offset通过括号中的两个参数确定要返回的单元格
Offset属性有两个参数,分别用来设置该属性的父对象在上下或左右方向上偏移的行列数,例如:
Range("B2:C3").Offset(5, 3).Value = 500
Range("D7:F8").Offset(-5, -2).Value = 500
4.5.8 Range对象的Resize属性
使用Range对象的Resize属性可以将指定的单元格区域有目的地扩大或缩小,得到一个新的单元格区域,例如:
Range("B2").Resize(5, 4).Select '将B2扩展为一个5行4列的单元格区域
'Resize属性把该对象最左上角的单元格当成返回结果最左上角的第1个单元格
'Resize属性的参数用来确定返回区域的行数和列数,第1参数用于确定行数,第2参数用于确定列数,两个参数都应设置为正整数。4.3.1 Workbook对象是Workbooks集合中的一个成员
2. 怎样引用集合中的某