下面是单击“插入工作表”标签后,Excel录制的代码:
Sub Macro1()
'
' Macro1 Macro
'由完美Excel创建
'
Sheets.Add After:=Sheets(Sheets.Count)
End Sub
在我的工作簿中,Excel插入了一个名为“Sheet4”的工作表,并且该工作表位于所有工作表之后,这是由参数After指定的。
下面是先选取工作表Sheet1,然后单击右键,在弹出的菜单中单击“插入”后插入一个新工作表的操作,由Excel录制的代码:
Sub Macro2()
'
' Macro2 Macro
'由完美Excel创建
'
Sheets("Sheet1").Select
Sheets.Add
End Sub
Excel将插入的工作表默认放置在当前工作表之前。
从上面的代码可以看出,Excel VBA使用Add方法添加新工作表。
Add方法
Add方法创建一个新工作表并使其成为活动工作表,其语法如下:
工作表对象.Add(Before,After,Count,Type)
说明:
-
所有参数均可选。
-
参数Before指定一个工作表,新添加的工作表放置在该工作表之前。
-
参数After指定一个工作表,新添加的工作表放置在该工作表之后。
-
参数Before和参数After只能二选一。
-
参数Count指定要添加的工作表数量,默认值为1。
-
参数 Type指定添加的工作表类型,可以是下列xlSheetType常量之一:xlWorksheet(工作表)、xlChart(图表工作表)、xlExcel4MacroSheet(宏表)、xlExcel4IntlMacroSheet。如果基于已有模板插入工作表,那么指定该模板的路径。默认值是xlWorksheet。
-
如果没有指定参数Before和参数After,那么在当前工作表的前面插入新工作表。
-
该方法返回一个代表新工作表的对象。
示例1:添加并命名新工作表
下面的代码在工作簿中所有工作表之后添加一个新工作表,并将其命名为“完美Excel”。
Sub AddNewSheetPlaceInLast()
Worksheets.Addafter:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "完美Excel"
End Sub
说明:
-
新添加的工作表成为活动工作表,因此使用Activesheet属性来返回当前工作表并使用Name属性来给工作表命名。
也可以删除工作表。在Excel界面底部的工作表标签中,选择要删除的工作表,单击右键,在弹出的菜单中选择“删除”,Excel会弹出一个提示工作表可能存在数据的警告消息框(如下图所示),单击“删除”按钮,即可删除工作表。
上述操作由Excel录制的宏代码为:
Sub Macro3()
'
' Macro3 Macro
' 由完美Excel创建
'
'
Sheets("Sheet6").Select
ActiveWindow.SelectedSheets.Delete
End Sub
从上面的代码可以看出,Excel VBA使用Delete方法删除工作表。
Delete方法
删除工作表,其语法如下:
工作表对象.Delete
说明:
-
该方法返回一个Boolean值。
-
删除工作表时,Excel会默认显示一个提示用户来确认删除操作的对话框。如果用户单击“取消”按钮,则返回False;如果单击“删除”按钮,则返回True。
示例2:删除除指定工作表名外的所有工作表
下面的代码删除工作簿中除“完美Excel”工作表外的所有工作表:
Sub DeleteWorksheet()
Dim ws As Worksheet
'关闭警告消息
Application.DisplayAlerts= False
'遍历工作表并删除工作表名不是"完美Excel"的工作表
For Each ws In Worksheets
If ws.Name <>"完美Excel" Then ws.Delete
Next ws
'恢复警告消息
Application.DisplayAlerts= True
End Sub
说明:
-
代码中设置DisplayAlerts属性值为False来禁止显示警告消息框,避免代码在删除工作表时弹出警告消息框,影响用户体验。代码最后将该属性值设置为True,以恢复Excel的默认设置。
-
Delete方法也将隐藏的工作表删除。
示例3:安全地删除工作表
Excel必须保证工作簿中至少有一个可见工作表,因此在删除工作表时,如果删除工作簿中仅有的一个可见工作表,就会导致运行时错误。
下面的代码保证工作簿中至少有一个可见工作表,然后才进行删除操作。代码使用了《Excel VBA解读(72):隐藏工作表——Visible属性》示例1中用于统计工作簿中可见工作表数量的VisibleSheetsNum函数过程。
Sub DeleteSheet()
Dim strName As String
'指定要删除的工作表名
strName ="Sheet1"
If VisibleSheetsNum > 1Then
Application.DisplayAlerts = False
Worksheets(strName).Delete
Else
MsgBox "工作簿中已没有可供删除的工作表!"
End If
End Sub
下面是Steven M.Hansen给出的安全删除工作表的较完善的代码,辑录于此,供学习与研究。
说明:
-
DeleteSheet函数过程需要两个变量,变量ws表示要删除的工作表,变量bQuiet设置在删除工作表时是否显示警告消息。
-
代码中的ws.Parent返回工作表的父对象,即工作表所在的工作簿。
-
变量bDeleted用于跟踪工作表是否删除。
-
过程代码使用了错误处理技术,在代码运行过程中发生错误时会直接执行错误处理代码。在后续文章中会详细介绍有关错误处理技术。
-
在工作簿中,至少要有一个可见工作表(包括图表工作表等),因此使用CountVisibleSheets函数过程统计工作簿中的可见工作表数。
-
ws.Parent.Worksheets(ws.Name).Delete可获取一个Boolean值,代表工作表是否被删除。此外,如果直接使用ws.Delete,则不能够捕捉指定工作表实际上是否已删除。