如果您是 Excel VBA 的初学者,您可能对 Worksheets 与 Sheets 在 Excel VBA 中的使用感到困惑。Worksheets 与 Sheets 有什么区别? 怎么在 Excel VBA 中的正确使用它们呢?
Sheets 对象
Sheets 对象是工作簿中所有类型工作表的集合。有 5 种不同类型的表:
- Worksheet:工作表。即带有网格线和单元格的表,我们常用的工作表就是这个类型。
- Chart:图表。我们将插入的图表移动到新工作表,这个新工作表类型就是图表。
- DialogSheet:对话框表。现已替换为 VBA 窗体。
- Macro sheets:Excel 版本 4 宏表。现已替换为 VBA。
- International Macro sheet:Excel 版本 4 国际通用宏表。现已替换为 VBA。
Sheets 集合可以包含 Charts 和 Worksheets 对象。虽然今天我们只使用 2 种类型的工作表,工作表和图表,但过去还有 3 种类型的工作表,例如对话框工作表或宏工作表。您的公司中可能仍有使用它们的旧 Excel 文件,在这种情况下,如果您检查 Sheets 集合,您会发现它们都在那里。
Worksheets 对象
Worksheets 对象是指工作簿中所有 Worksheet 对象的集合。每个 Worksheet 对象代表一个工作表。Worksheet 对象也是 Sheets 集合的成员。Sheets 集合包含工作簿中的所有工作表(包括图表工作表和工作表)。
我们使用 Worksheets.Add
与 sheets.Add
不指定工作表类型,所新建的表类型就是 Worksheet。
Charts 对象
Charts 对象是指工作簿中所有图表工作表的集合。Chart 对象也是 Sheets 集合的成员。
示例
我们可以通过下面这个示例来区分 Sheets 与 Worksheets:
Sub SheetsVsWorksheets()
Dim SheetsInNew As Integer
Dim sht
Dim ws
Dim cht
SheetsInNew = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 1 '设置创建一个新工作簿只包含 1 个工作表
Workbooks.Add '新建一个工作簿
'添加 5 种不同类型的表
Sheets.Add Type:=xlWorksheet '工作表
Sheets.Add Type:=xlChart '图表
Sheets.Add Type:=xlDialogSheet '对话框表
Sheets.Add Type:=xlExcel4MacroSheet 'Excel 4.0 宏表
Sheets.Add Type:=xlExcel4IntlMacroSheet 'Excel 4.0 国际通用宏表
Debug.Print "表总数: " & Sheets.Count
'循环遍历 Sheets 集合中的每个对象
For Each sht In ActiveWorkbook.Sheets
Debug.Print "表名: " & sht.Name & ", 类型: " & TypeName(sht)
Next sht
Debug.Print
Debug.Print "工作表总数: " & Worksheets.Count
'循环遍历 Worksheets 集合中的每个 Worksheet 对象
For Each ws In ActiveWorkbook.Worksheets
Debug.Print "工作表名: " & ws.Name & ", 类型: " & TypeName(ws)
Next ws
Debug.Print
Debug.Print "图表总数: " & Charts.Count
'循环遍历 Charts 集合中的每个 Chart 对象
For Each cht In ActiveWorkbook.Charts
Debug.Print "图表名: " & cht.Name & ", 类型: " & TypeName(cht)
Next cht
Application.SheetsInNewWorkbook = SheetsInNew '恢复创建新工作簿包含的工作表设置
End Sub
结果
运行上面的过程后,我们看到在新工作簿中一共有6个表:
在 VBE 对象窗口中,我们只看到新建的工作簿2中只有两种类型的表,即工作表和图表,只有这两种表能写入 VBA 代码,别外两种宏表和对话框表都不存在:
在立即窗口中显示的结果:
表总数: 6
表名: 宏2, 类型: Worksheet
表名: 宏1, 类型: Worksheet
表名: 对话框1, 类型: DialogSheet
表名: Chart1, 类型: Chart
表名: Sheet2, 类型: Worksheet
表名: Sheet1, 类型: Worksheet
工作表总数: 2
工作表名: Sheet2, 类型: Worksheet
工作表名: Sheet1, 类型: Worksheet
图表总数: 1
图表名: Chart1, 类型: Chart
在 Excel VBA 中,如果你要在引用的工作表中使用公式,为避免出错,您最好使用 Worksheets() 而不是 Sheets() 。