在工作表事件中是沒有工作表删除事件的,為了防止用戶誤删除重要的工作表,除了使用保護工作簿方法外,還可以使用下面的代碼。
#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 禁止删除工作表
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!