目录
工作表对象(Worksheet)与单元格对象(Range)的关系
示例
如图所示,该表为某公司在银行的余额汇总。现希望按照模板的格式生成若干张工作表,各工作表以银行名称作为表格名称,并将该银行信息填入表内。如何用VBA批量完成?
实现代码
Option Explicit
Sub 按模板生成工作表()
Dim RowN As Long
Dim shtOld As Worksheet
Dim shtNew As Worksheet
Dim shtTemplate As Worksheet
'设定模板
Set shtTemplate = Sheets("Sheet2")
'设定数据工作表
Set shtOld = Sheets("Sheet1")
'遍历所有的记录
For RowN = 2 To Cells(Rows.Count, "A").End(xlUp).Row
'创建工作表的副本,并将其放置于最后
shtTemplate.Copy after:=Worksheets(Worksheets.Count)
'变量赋值,指向新创建的工作
Set shtNew = Worksheets(Worksheets.Count)
'更改名称
shtNew.Name = shtOld.Cells(RowN, "A").Value
shtNew.Cells(3, "A").Value = shtOld.Cells(RowN, "A").Value
shtNew.Cells(9, "A").Value = shtOld.Cells(RowN, "B").Value
shtNew.Cells(9, "E").Value = shtOld.Cells(RowN, "C").Value
Next
End Sub
工作表对象(Worksheet)及其表示方法
工作表对象(Worksheet)是Excel中一个非常重要的对象,它代表一个工作表。在VBA中,若要表示当前工作簿中的工作表,可以采用以下几种表示方式。
1.序号表示法
序号表示法是以工作表在工作簿中的位置来表示的,其语法如下:
Worksheets(indexNo)
该表达式将返回一个工作表对象。其中,Worksheets表示当前工作簿中工作表的集合,即当前工作簿中所有的工作表。参数indexNo表示工作表的序号,该序号从1开始,最大为当前工作簿中工作表的数量。
使用本方法表示工作表时,序号是以工作表在工作簿中的位置来决定的,如图所示。该工作簿中第1个工作表即“Sheet2”工作表,在此排序下,可以使用以下表达式来表示:
而当工作表的位置交换后,Worksheets (1)可能表示其他工作表。
2.工作表名称表示法
本方法是以工作表的名称来表示工作表对象,其语法如下:
Worksheets(sheetname)
该表达式将返回一个工作表对象。其中,参数sheetname为工作表名称的文本表达式,该名称是工作表界面在工作表标签上所显示的名称。
3.对象名称表示法
对象名称是在VBE的工程资源浏览器所显示的名称,如图所示。用该名称可以直接表示某个工作表对象,相当于使用一个工作表类型(Worksheet)的变量,而该名称为该变量的名称。
使用本方法表示工作表对象,则不会受工作表位置或者工作表标签名称变化的影响,可以使代码更加通用和稳定。
工作表集合和工作表
工作表集合对象(Worksheets)是若干个工作表对象(Worksheet)的集合。若不加任何限定,Worksheets对象可以直接表示工作簿中所有的工作表,工作表对象则必须使用上述表示方法来表示以特指某个工作表,如:工作表在其集合中特定的位置(indexNo)或者名称( sheetname)。在Excel VBA中,类似于worksheets和worksheet的关系还有单元格集合(Cells)和单元格对象(Range)、工作簿集合(Workbooks)和工作簿(Workbook)。
需要注意的是,表达式Worksheets是VBA中的一个对象,可以直接使用。而表达式Worksheet是一个对象的类型,不可直接使用。若需使用工作表对象,则必须遵循本例中的3种表示方法表示某个工作表对象。