跳到主要内容

Sheets 与 Worksheets 在 Excel VBA 中的正确使用

如果您是 Excel VBA 的初学者,您可能对 Worksheets 与 Sheets 在 Excel VBA 中的使用感到困惑。Worksheets 与 Sheets 有什么区别? 怎么在 Excel VBA 中的正确使用它们呢?

Sheets 对象

Sheets 对象是工作簿中所有类型工作表的集合。有 5 种不同类型的表:

  1. Worksheet:工作表。即带有网格线和单元格的表,我们常用的工作表就是这个类型。
  2. Chart:图表。我们将插入的图表移动到新工作表,这个新工作表类型就是图表。
  3. DialogSheet:对话框表。现已替换为 VBA 窗体。
  4. Macro sheets:Excel 版本 4 宏表。现已替换为 VBA。
  5. International Macro sheet:Excel 版本 4 国际通用宏表。现已替换为 VBA。

Sheets 集合可以包含 Charts 和 Worksheets 对象。虽然今天我们只使用 2 种类型的工作表,工作表和图表,但过去还有 3 种类型的工作表,例如对话框工作表或宏工作表。您的公司中可能仍有使用它们的旧 Excel 文件,在这种情况下,如果您检查 Sheets 集合,您会发现它们都在那里。

Worksheets 对象

Worksheets 对象是指工作簿中所有 Worksheet 对象的集合。每个 Worksheet 对象代表一个工作表。Worksheet 对象也是 Sheets 集合的成员。Sheets 集合包含工作簿中的所有工作表(包括图表工作表和工作表)。

我们使用 Worksheets.Addsheets.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个表:

添加5种不同类型的表
添加5种不同类型的表

在 VBE 对象窗口中,我们只看到新建的工作簿2中只有两种类型的表,即工作表和图表,只有这两种表能写入 VBA 代码,别外两种宏表和对话框表都不存在:

Sheets 与 Worksheets
Sheets 与 Worksheets

在立即窗口中显示的结果:

表总数: 6
表名: 宏2, 类型: Worksheet
表名: 宏1, 类型: Worksheet
表名: 对话框1, 类型: DialogSheet
表名: Chart1, 类型: Chart
表名: Sheet2, 类型: Worksheet
表名: Sheet1, 类型: Worksheet

工作表总数: 2
工作表名: Sheet2, 类型: Worksheet
工作表名: Sheet1, 类型: Worksheet

图表总数: 1
图表名: Chart1, 类型: Chart

评论

您的电子邮件地址不会显示出来。*号为必填项。