在对工作表中的单元格区域进行操作时,通常需要指定引用的工作表,在 VBA 中引用工作表有以下几种方法:
使用工作表名称
工作表名称是显示在工作表标签中的文本,使用工作表名称引用工作表可以利用 WorkSheets 集合和 Sheets 集合两种引用方式,下面的两句代码都可以激活工作簿中名称为“Sheet1”的工作表,激活后工作表将成为活动工作表。
Worksheets("Sheet1").Activate
Sheets("Sheet1").Activate
WorkSheets 与 Sheets
WorkSheets 集合包含所有的工作表。
Sheets 集合不仅包含工作表集合 WorkSheets,还包含图表集合 Charts,宏表集合 Excel4MacroSheets 与 MS Excel 5.0 对话框集合等。详细区别与使用参见:Sheets 与 Worksheets 在 Excel VBA 中的正确使用
任何时刻工作簿中只有一个工作表是活动工作表。
任何时刻工作簿内至少要有一张可视表。
使用索引号
工作表索引号是工作表在工作簿中的位置,Excel 根据工作表在工作表标签中的位置以 1
开始从左向右进行编号。
例如,下面的两行代码都将激活第一个工作表:
Worksheets(1).Select
Worksheets(1).Activate
单个 WorkSheet 对象的 Select
方法与 Activate
方法的主要区别在于 Select
方法要求工作表可见,如果第一张工作表是隐藏的,使用 Worksheets(1).Select
将出错。
如果工作簿中不仅包含工作表,还包含图表或宏表等,此时使用索引号引用工作表可能不是同一个表。
例如:工作簿中从左向右的工作表为:Sheet1、Chart1、Sheet2,当使用 Sheets(2).Select
时激活的工作表是 Chart1
,当使用 Worksheets(2).Select
时激活的工作表是 Sheet2
。
Worksheet 对象的 index 属性返回工作表的索引号,如下面的示例代码显示工作表"Sheet1”的索引号:
MsgBox Worksheets("Sheet1").Index
使用代码名称
工作表代码名称显示在 VBE 【工程资源管理器】窗口中,在【属性】窗口的【名称】项中能够修改工作表代码名称。如下图所示,工作表 Sheet1
的代码名称改为 MySheet1
。
我们能够直接使用工作表代码名称来引用工作表,使用工作表代码名称的好处是:即使工作表名称被用户修改,代码仍然能够正常运行。
可以使用 Worksheet
对象的 CodeName
属性返回工作表的代码名称,如下面的代码返回第一张工作表的代码名称:
MsgBox Worksheets(1).CodeName
更多关于如何使用和重命名代码称请参阅:使用 VBA 代码名称详解。
使用 ActiveSheet 引用活动工作表
以下示例代码将活动工作表的名称修改为“果果云课堂
”,然后使用消息框显示工作表的名称和工作表的代码名称。
Sub UseName()
With ActiveSheet
.Name = "果果云课堂"
MsgBox "名称为:" & .Name & vbCrLf & "代码名称为:" & .CodeName
End With
End Sub
ActiveSheet
属性应用于 Application
对象 Window
对象和 Workbook
对象,返回代表活动工作簿或者指定的窗口或工作簿中的活动工作表,如果没有活动的工作表,该属性则返回 Nothing
。如果省略对象,该属性则返回活动工作簿中的活动工作表。