在工作表事件中是没有工作表删除事件的,为了防止用户误删除重要的工作表,除了使用保护工作簿方法外,还可以使用下面的代码。
#001 Public Ctl As CommandBarControl
#002 Sub DelSht()
#003 Set Ctl = Application.CommandBars.FindControl(ID:=847)
#004 Ctl.OnAction = "MyDelSht"
#005 End Sub
#006 Sub ResSht()
#007 Set Ctl = Application.CommandBars.FindControl(ID:=847)
#008 Ctl.OnAction = ""
#009 End Sub
#010 Sub MyDelSht()
#011 If VBA.UCase$(ActiveSheet.CodeName) = "SHEET2" Then
#012 MsgBox "禁止删除" & ActiveSheet.Name & "工作表!"
#013 Else
#014 ActiveSheet.Delete
#015 End If
#016 End Sub
代码解析:
DelSht过程将工作表标签右键菜单中的“删除工作表”菜单的OnAction属性设置为“MyDelSht”。
第3行代码使用Set语句将工作表标签右键菜单中的“删除工作表”菜单赋给变量Ctl,并将其OnAction属性设置为MyDelSht过程,该菜单被单击时将运行“MyDelSht”过程而不是系统默认的设置。OnAction属性返回或设置一个VBA的过程名,该过程在用户单击或更改某命令栏控件的值时运行。
ResSht过程将工作表标签右键菜单中的“删除工作表”菜单的OnAction属性恢复为默认设置。
MyDelSht过程判断所要删除的工作表的代码名称是否是“SHEET2”,如果是则禁止删除该表而只显示一个提示消息框。
为了不影响其他工作簿的使用,在VBE中双击ThisWorkbook写入下面的代码。
#001 Private Sub Workbook_Activate()
#002 Call DelSht
#003 End Sub
#004 Private Sub Workbook_Deactivate()
#005 Call ResSht
#006 End Sub
代码解析:
工作簿的Activate事件和Deactivate事件代码,在工作簿激活时运行DelSht过程,在关闭或打开其他工作簿时运行ResSht过程,这样只禁止删除本工作簿中“SHEET2”工作表,并不影响其他工作簿。
当删除本工作簿中的“SHEET2”工作表时,并不会显示如图 26‑1所示的消息框,而只会显示如图 26‑2所示的禁止删除工作表的消息框。
图 26‑1 删除工作表提示
图 26‑2 禁止删除工作表
,