Excel VBA中对workbook、worksheet、range的选择和操作
Workbooks对象是Microsoft Excel 应用程序中当前打开的所有 Workbook 对象的集合。有close、add、open等方法。
Workbooks.close
' ↑ 关闭所有打开的工作簿。
Workbooks.Add
' ↑ 创建一个新工作簿。
Workbooks.open Filename:="TEST.XLSX", ReadOnly:=True
' ↑ 将文件TEST.XLSX打开为只读工作簿
Workbook对象是一个Microsoft Excel 工作簿。有Name、Path等属性。有SaveAs等方法。有Open、Activate等事件。
- ThisWorkbook属性返回运行Visual Basic代码的工作簿。当Visual Basic代码是加载宏的组成部分时,返回加载宏的工作簿,而非调用该加载宏的工作簿。
- ActiveWorkbook属性返回当前处于活动状态的工作簿。
- 使用 Workbooks(index)(其中 index 是工作簿名称或索引号)可返回一个 Workbook 对象。index指创建或打开工作簿的顺序。Workbooks(1) 是创建的第一个工作簿,而 Workbooks(Workbooks.Count)Workbooks返回最后一个打开的工作簿。激活某工作簿并不更改其索引号。所有工作簿均包括在索引计数中,即便是隐藏工作簿也是。
Workbooks(1).Activate
' ↑ 激活工作簿一(创建或打开的第一个工作簿)。
Workbooks("TEST.xlsx").Worksheets("Sheet1").Activate
' ↑ 激活名为“TEST.xlsx”的工作簿(该工作簿必须已经在 Microsoft Excel 中打开)中的 Sheet1。
ActiveWorkbook.Author = "Jean Selva"
' ↑ 设置活动工作簿作者的名称。
Sheets集合是指定的或者活动工作簿中所有的工作表(图表工作表Chart和工作表Worksheet)的集合。有Add等方法。
- 使用 Sheets(index)(其中 index 是工作表名称或索引号)可返回一个 Chart 或 Worksheet 对象。工作表索引号指示该工作表在工作簿的标签栏上的位置。Worksheets(1) 是工作簿中第一个(最左边的)工作表,而 Worksheets(Worksheets.Count) 是最后一个。所有工作表均包括在索引计数中,即便是隐藏工作表也是。
- 使用 Sheets(array) 可指定多个工作表。
Sheets(1).Activate
' ↑ 激活活动工作簿中的工作表二。
Sheets("sheet1").Activate
' ↑ 激活活动工作簿中名为“Sheet1”的工作表。
Sheets(Array("Sheets4", "Sheet5")).Move before:=Sheets(1)
' ↑ 将名为"Sheet4"和"Sheet5"的工作表移到活动工作簿的开头。
Worksheets对象是指定的或者活动工作簿中所有WorkSheet对象的集合。有Add等方法。
- 使用 Worksheets(index)(其中 index 是工作表索引号或名称)可返回一个 Worksheet 对象。工作表索引号指示该工作表在工作簿的标签栏上的位置。Worksheets(1) 是工作簿中第一个(最左边的)工作表,而 Worksheets(Worksheets.Count) 是最后一个。所有工作表均包括在索引计数中,即便是隐藏工作表也是。
Worksheets.move After:=Sheets(SHeets.Count)
' ↑ 将所有工作表都移到工作簿的尾部,即将图表工作表都放在工作表之前。
Worksheets.Add count:=2, Before:=Sheets(1)
' ↑ 在活动工作簿的工作表一之前创建两个新工作表。
Worksheets(1).Visible = False
' ↑ 隐藏活动工作簿中的工作表一。
Worksheet对象代表一个工作表。有Name等属性。有Activate、Delete等方法。有Name、Cells等属性。有Activate、Change等事件。
- 使用 Worksheets(index)(其中 index 是工作表索引号或名称)可返回一个 Worksheet 对象。工作表索引号指示该工作表在工作簿的标签栏上的位置。Worksheets(1) 是工作簿中第一个(最左边的)工作表,而 Worksheets(Worksheets.Count) 是最后一个。所有工作表均包括在索引计数中,即便是隐藏工作表也是。工作表名称是工作表的标签上显示的名称。
- ActiveSheet 属性返回当前处于活动状态的工作表。如果没有活动的工作表,则返回Nothing。
Range对象代表某一单元格、某一行、某一列、某一选定区域(可包含一个或多个连续单元格区域)或某一三维区域。有Clear、Copy等方法。有Cells、Value、Font等属性。
Range("A1).Value = "test"
' ↑ 将活动表上的A1单元格赋值为“test”。如果活动表不是工作表,则失败。
Worksheets("sheet1").Range("A5").Value = "test"
' ↑ 将活动工作簿中名为“Sheet1”的工作表上的A1单元格赋值为“test”。字母大写或小写都可以。
Worksheets("Sheet1").Range("A1:H8").Formula = "=Rand()"
' ↑ 为活动工作簿中名为“Sheet1”的工作表上的区域A1:H8中的每个单元格设置公式。
Worksheets(1).Range("Criteria").ClearContents
' ↑ 清除区域名为“Critiria”的区域中的内容。
Range("1:4").Select
' ↑ 选择第1到4行
Range("A:C").Select
' ↑ 选择A到C列
Range("A:C").EntireColumn.Insert
' ↑ 在第1列左边插入三列空白列
- 使用 Cells(row, column)(其中 row 是行号,column 是列标)可返回一个单元格。当工作表激活以后,使用 Cells 属性时不必明确声明工作表(它将返回活动工作表上的单元格)。column列标可以是字母格式的,例如Cells(1,"A");也可以是数字格式的。row行号和column列标可以为变量。
Worksheets("sheet1").Cells(1,1).Value = "test"
' ↑ 将活动工作簿中名为“Sheet1”的工作表上的A1单元格赋值为“test”。
- 使用 Range(cell1, cell2)(其中 cell1 和 cell2 是指定起始和终止单元格的 Range 对象)可返回一个 Range 对象。
Worksheets(1).Range(Worksheets(1).Cells(1,1), Worksheets(1).Cells(10,10)).Borders.LineStyle = xlThick
' ↑ 设置单元格区域A1:J10的边框线条的样式。如果Cells之前没有句点及其左边的对象(对象识别符),Cells 属性将返回活动工作表上的单元格。
- 使用 expression.Cells(row, column)(其中 expression 是返回 Range 对象的表达式,row 和 column 是相对于该区域左上角的偏移量)可返回区域中的一部分。
Worksheets("Sheets1").Range("A5:H8").Cells(1,1).Formula = "=Rand()"
' ↑ 为A5单元格设置公式。
- 使用Union可返回多块区域,即该区域由多个连续的单元格区域所组成。
Union(Range("A1:B2", Range(C3:D4")).Select
' ↑ 选定多块区域。
- Range.Areas属性将多区域选定内容拆分为单个的Range对象,并将对象返回为一个集合。
x = Selection.Areas.Count
' ↑ 返回多区域选定内容中的连续区域单元格的数量。
- Range.Row属性返回区域中第一个子区域的第一行的行号。
x = Selection.Row
' ↑ 返回选定区域的行号。
- Range.Rows属性返回一个Range对象
Worksheets("Sheet1").Rows(3).Delete
x = Selection.Rows.Count
' ↑ 返回选定区域的行数。
- 可以直接使用单元格地址进行选择和操作,但地址中不可包含变量。
[b7].Select
' ↑ 选定B7单元格。单元格地址用字符串表达,如A1、B3等,字母可小写。注意用中括号括起单元格地址。
[a1:B5].Select
' ↑ 选择单元格区域
[a1:a3,c1:c5].Select
' ↑ 选择多个单元格区域
- Range.CurrentRegion属性返回一个Range对象,该对象表示当前区域(当前区域是以空行与空列的组合为边界的区域)。
ActiveCell.CurrenRegion.Select
' ↑ 选定活动单元格所在的当前区域。
- ListObject对象代表工作表中的表格/列表对象(即在工作表中插入表格后形成的列表)。
ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A$1:$B$2"), , xlYes).Name = "表1"
' ↑ 将活动工作表中的”A1:B2“区域转化为表格,命名为”表1“
ActiveSheet.ListObjects("表1").Name = "表ABC"
' ↑ 将表格名称改为”表ABC”
ActiveSheet.ListObjects("表ABC").Resize Range("$A$1:$B$10")
' ↑ 将表格区域改为”A1:B10“